本篇简要介绍使用R的一些基本概念,包括基本说明、获取帮助、工作空间、输入输出,每个知识点中都会通过一个例子来练习。

一、R基本情况说明

  1、R是一种区分大小写的解释性语言。

  2、控制台默认使用命令提示符 < 表示。我们可以在 < 后每次输入一条命令;按 Enter键 执。或者一次性将一组命令写在一个文件中,执行该文件。

  3、R的数据类型包括向量、矩阵、数据框(类似于数据集)和列表(各种对象的集合)。

  4、R的大部分功能都是有程序内置函数和用户自编函数提供的,一次交互性会话期间的所有数据对象都被保存于内存中(这点很重要)。一些基本函数都是默认直接可使用的,其他高级函数则包含于按需加载的程序包中。

  5、R语句是由函数和赋值构成的。其中,R使用<- 作为赋值符号。注:R允许以=作为赋值符,但是这并不是标准写法。另外,我们可以反转赋值方向。x <- 5 和 5 -> x 的意思一样。

  6、注释。R的注释符是#,任何#后出现的文本都会被R解释器忽略。

  先来个小例子练练手吧:

  录入代码和部分运行结果:

> age <- c(1,3,5,2,11,9,12,3)
> weight <- c(4.4,5.3,7.2,5.2,8.5,7.3,6.0,10.4,10.2,6.1)
> mean(weight)
[1] 7.06
> sd(weight)
[1] 2.077498
> cor(age,weight)
Error in cor(age, weight) : 不兼容的量度
> age <- c(1,3,5,2,11,9,3,9,12,3)
> cor(age,weight)
[1] 0.9075655
> plot(age,weight)
>

  

  对以上的过程进行解释。注意,只是解释每个命令提示符的过程。[]表示结果。

  ①使用函数c()以向量的形式录入一组数据,并赋值给变量age,表示年龄;

  ②同理,使用函数c()以向量的形式录入一组数据,并赋值给变量weight,表示体重;

  ③对体重求平均;

  ④求体重的标准差;注:这里报了一个错误:不兼容的量度。原来是age向量和weight向量的数值个数不一致导致的。重新对age进行赋值,再重新运行标准差的命令。(通过键盘上的方向键 ↑ 可以快速录入之前的命令文本)

  ⑤计算年龄age和体重weight的相关度;

  ⑥用图形展示年龄和体重的关系。

二、获取R帮助

  学会如何通过帮助文档来助力编程,是一个攻城狮必备的软技能。

  R的内置帮助文档提供了当前已安装包中所有函数的细节、参考文献以及使用示例。我们可以通过以下函数进行查看

函数  功能
help.start() 打开帮助文档首页,HTML格式
help("函数名")或?函数名 查看函数的帮助,比如help("c")表示查看函数c的帮助;“”可以省略
help.search("函数名")或??函数名 以函数名作为关键词在本地帮助文档中搜索
RSiteSearch("函数名") 以函数名作为关键词搜索在线文档和邮件列表存档,结果以网页形式展现
apropos("参数名",mode="function") 列出名称中包含有制定参数的所有函数
data() 列出当前所加载的包中所有的可用示例数据集
vignette() 列出当前所加载包中所有的vignette文档,又称 小文品,一般是PDF格式的文档
example("函数名") 函数的使用示例,引号可以省略
vignette("foo") 以foo作为主题,显示相关的小文品

三、R的工作空间

  工作空间(workspace)就是当前R的工作环境,它储存着所有用户定义的对象(向量、矩阵、 函数、数据框、列表)。

  在一个R会话结束时,你可以将当前工作空间保存到一个镜像中,并在下 次启动R时自动载入它。各种命令可在R命令行中交互式地输入。使用上下方向键查看已输入命 令的历史记录。这样我们就可以选择一个之前输入过的命令并适当修改,最后按回车重新执行它。

   当前的工作目录(working directory)是R用来读取文件和保存结果的默认目录。我们可以使 用函数getwd()来查看当前的工作目录,或使用函数setwd()设定当前的工作目录。

  如果需要读 入一个不在当前工作目录下的文件,则需在调用语句中写明完整的路径。记得使用引号闭合这些 目录名和文件名。

  管理工作空间的部分标准命令见表

函  数        功能
getwd() 显示当前的工作目录
setwd("mydirectory") 修改当前的工作目录为mydirectory
ls() 列出当前工作空间中的对象
rm(objectlist) 移除(删除)一个或多个对象
help(options) 显示可用选项的说明
options() 显示或设置当前选项
history(#) 显示最近使用过的#个命令(默认值为25)
savehistory("myfile") 保存命令历史到文件myfile中(默认值为.Rhistory)
loadhistory("myfile") 载入一个命令历史文件(默认值为.Rhistory)
save.image("myfile") 保存工作空间到文件myfile中(默认值为.RData)
save(objectlist, file="myfile") 保存指定对象到一个文件中
load("myfile") 读取一个工作空间到当前会话中(默认值为.RData)
q() 退出R。将会询问你是否保存工作空间

  通过运行以下代码清单和观察结果来理解以上的命令:    

  

  ①查询当前的工作目录,是默认目录

  ②更改当前的工作目录,到自己的目录。记得路径要用正斜杠。

  ③再次查询当前的工作目录,发现已经更改为我们自己的路径了

  ④创建一个包含20个均匀分布的随机变量的向量,赋值给x

  ⑤查询x

  ⑥生成x的摘要统计量

  ⑦生成x的直方图

  ⑧格式化打印台的显示,保留三位有效数字,全局临时变量。注意:数值型的变量显示三位有效数字,很好理解;如果向量中的每个数据的精确度不一样又怎么显示呢?R采取的策略是:该向量所有数值最小的值按照digits的精确度显示,其他的数值和该结果的最小的位数保持一致。例如上述例子中,options(digits=3)时,此时查询x向量,因为x的最小值是0.05688816,最小值保留三位有效数字是0.0569,x中其他的数值要和0.0569小数位数保持一致,这就是为什么其他的数值看起来有效个数并不是3的原因。

  ⑨x的直方图效果如下:

  

  ⑩将命令的历史记录保存到文件名为day01中,没有则新建

  ⑪工作空间保存到wd_day01中,没有则新建(如果不指定文件名load(),会在当前工作路径下自动创建.RData文件,如已存在,则追加),效果如下:

  

  ⑫结束当前会话。

  

  现在我们重新启动会话,运行以下代码观察效果:

  

  ①重新打开的会话的工作空间被重置为默认的工作路径

  ②重新设置工作空间路径后,ls()并没有任何对象

  ③加载之前保存的工作空间文件,这时,我们之前创建的对象x就可以再次使用啦,并且,我们发现此时的options("digits")值恢复为默认值了(7)。

四、R的输入输出

  1、启动R后,默认开始一个交互式的会话,从键盘接收输入和从屏幕进行输出。

  2、source("文件名"),在当前会话执行一个脚本文件,文件名不包含路径的话,R会假设此脚本在当前工作目录中。

  3、sink()重定向文本文件。不加参数sink()仅仅向屏幕返回输出结果;sink("文件名"),将结果重定向到指定文件中,默认情况下,覆盖该文件;设置参数append=TRUE时,追加在指定文件后,不覆盖;设置split=TRUE时,输出结果同时发送给屏幕和输出到文件中。

  4、图形输出可以使用以下命令,最后使用dev.off()将输出返回到终端:

  举例:

  如果执行:

  source("script.R")

  将会在当前回话中执行文件script.R中的R代码,结果显示在屏幕上;

  如果执行:

  sink("输出文件名",append=TRUE,split=TRUE)

  pdf("图片.dpf")

  source(script2.R)

  当前回话将会执行script.R中R代码,结果会同时显示在屏幕上,文本输出将会追加到文件输出文件的后面,图形输出保存在到文件 图片.pdf中。

  如果执行:

  sink()

  dev.off()

  source("script3.R")

  文件script3.R中的R代码将会执行,结果仅仅显示在屏幕上

五、R包

  R提供大量开箱即用的功能(自带功能),更让人激动的是一部分功能可以通过可选模块的下载和安装来实现。下载地址:http://cran.r-project.org/web/packages

  这些包横跨多个领域、数量惊人,包括了地理数据分析、处理蛋白质质谱、心里检测分析。

  包是什么?

  包是函数、数据、预编译代码以一种定义完善的格式组成的集合。存储包的位置叫做 库(library)。函数 .libPaths()能够显示 库的路径,函数library()则可以显示库中所有的包,包只有被加载才能使用,search()用于查询那些包被加载可以使用了:

  包的安装和更新

  第一次安装包,可以使用install.packages()。不加参数执行install.packages()将显示一个CRAN镜像站点列表,选择其中一个镜像站点后,可以看到所有可用包的列表,选择其中一个下载和安装。

  

  选中其中一个站点双击:

  下载提示成功:

  

  如果你知道自己想安装包的名字的话,可以直接使用 install.packages("包名")来下载安装它。

  update.packages()可以更新已经安装的包:

  

  installed.packages()将列出安装的包,以及他们的版本号、所在库位置、依赖关系、通行证等信息。

  

  包的载入

  包的下载仅仅是将包从某个镜像网站下载并放入库中的过程,要在R中使用这个包的话,还需要在当前回话中载入它,可以使用命令 library()。如要使用gclus包,执行命令library(gclus)即可;

  包在每次对话中只需要载入一次;

  如果有必要,可以在自定义启动中启动那些会频繁使用的包。(包括之前的工作空间等,我们发现R中部分功能在开始新的会话时会恢复到默认,这对于大部分程序员来说,是可忍孰不可忍!好,我们下一章专门探索一下如何自定义启动环境)

  

  包的使用

  在载入一个包之后就可以使用中这个包中一系列的函数和数据集了。

  命令help(package= "gclus")将输出这个包中所有函数名和数据集列表以及简短描述:

  

初窥R(基本说明、获取帮助、工作空间、输入输出、包)的更多相关文章

  1. Java发送邮件初窥

    一.背景 最近朋友的公司有用到这个功能,之前对这一块也不是很熟悉,就和他一起解决出现的异常的同时,也初窥一下使用Apache Common Email组件进行邮件发送. 二.Java发送邮件的注意事项 ...

  2. Flutter 即学即用系列博客——04 Flutter UI 初窥

    前面三篇可以算是一个小小的里程碑. 主要是介绍了 Flutter 环境的搭建.如何创建 Flutter 项目以及如何在旧有 Android 项目引入 Flutter. 这一篇我们来学习下 Flutte ...

  3. IPFS初窥

    虽然区块链有很多令人兴奋的特性,但是也有其固有的缺点.比如,文件或者长度较长的文本信息就不适合存储在链上.那么如何解决这个缺点呢?一个解决方案就是IPFS(Interplanetary File Sy ...

  4. Scrapy001-框架初窥

    Scrapy001-框架初窥 @(Spider)[POSTS] 1.Scrapy简介 Scrapy是一个应用于抓取.提取.处理.存储等网站数据的框架(类似Django). 应用: 数据挖掘 信息处理 ...

  5. 初窥Kaggle竞赛

    初窥Kaggle竞赛 原文地址: https://www.dataquest.io/mission/74/getting-started-with-kaggle 1: Kaggle竞赛 我们接下来将要 ...

  6. scrapy2_初窥Scrapy

    递归知识:oop,xpath,jsp,items,pipline等专业网络知识,初级水平并不是很scrapy,可以从简单模块自己写. 初窥Scrapy Scrapy是一个为了爬取网站数据,提取结构性数 ...

  7. WWDC15 Session笔记 - Xcode 7 UI 测试初窥

    https://onevcat.com/2015/09/ui-testing/ WWDC15 Session笔记 - Xcode 7 UI 测试初窥 Unit Test 在 iOS 开发中已经有足够多 ...

  8. iOS视频直播初窥:高仿<喵播APP>

    视频直播初窥 视频直播,可以分为 采集,前处理,编码,传输, 服务器处理,解码,渲染 采集: iOS系统因为软硬件种类不多, 硬件适配性比较好, 所以比较简单. 而Android端市面上机型众多, 要 ...

  9. js算法初窥05(算法模式02-动态规划与贪心算法)

    在前面的文章中(js算法初窥02(排序算法02-归并.快速以及堆排)我们学习了如何用分治法来实现归并排序,那么动态规划跟分治法有点类似,但是分治法是把问题分解成互相独立的子问题,最后组合它们的结果,而 ...

随机推荐

  1. PHP函数include include_once require和require_once的区别

    了解下include.include_once.require和require_once这4个函数: include函数:会将指定的文件读入并且执行里面的程序: require函数:会将目标文件的内容 ...

  2. 解决Connection to Xxx@localhost failed.

    解决: Connection to jianshu@localhost failed. [08001] Could not create connection to database server. ...

  3. shell脚本简单例子

    eg: Expect: 1.用环境变量RANDOM随机生成一个100以内的随机数 2.read读取当前输入 3.当前输入对比随机生成的数 4.当两个数相等时跳出苏循环,并计数(比较n次结果才相等) # ...

  4. CarbonData:大数据融合数仓新一代引擎

    [摘要] CarbonData将存储和计算逻辑分离,通过索引技术让存储和计算物理上更接近,提升CPU和IO效率,实现超高性能的大数据分析.以CarbonData为融合数仓的大数据解决方案,为金融转型打 ...

  5. 集合<class'set'>

    >>> s = {1,2,3,4} >>> s&{1,3}{1, 3}>>> s|{11}{1, 2, 3, 4, 11}>> ...

  6. DRF Django REST framework 之 序列化(三)

    Django 原生 serializer (序列化) 导入模块 from django.core.serializers import serialize 获取queryset 对queryset进行 ...

  7. luogu P2899 [USACO08JAN]手机网络Cell Phone Network |贪心

    include include include include include include define db double using namespace std; const int N=1e ...

  8. ios-AutoLayout(自动布局代码控制)简单总结

    转自:http://blog.sina.com.cn/s/blog_7c336a830102vaht.html 原理:IOS6.0 之后,苹果优化了UI界面的布局方式,提出了自动布局的概念,和之前的a ...

  9. 一份详细的 Matplotlib入门指导

    hMatplotlib是最受欢迎的二维图形库,但有时我们很难做到得心应手的去使用. 如何更改图例上的标签名称? 如何设置刻度线? 如何将比例更改为对数? 如何在我的情节中添加注释和箭头? 如何在我的图 ...

  10. uni-app微信小程序开发之引入腾讯视频小程序播放插件

    登录微信小程序管理后台添加腾讯视频播放插件: 正式开始使用腾讯视频小程序插件之前需先在微信公众平台 -> 第三方设置 -> 插件管理处添加插件,如下图所示: 在uni-app中引入插件代码 ...