R语言笔记之文档检索与环境配置

R帮助函数

help.start() ,打开帮助文档首页

help.search("foo")??foo,以foo为关键词搜索本地帮助文档,?Startup查看与R有关的启动文件信息;

example("foo") ,函数foo的使用示例(引号可以省略)

RSiteSearch("foo"),以 foo 为关键词,查询整个 http://search.r-project.org 网站的包,例如RSiteSearch("{Bayesian regression}")

apropos("foo",mode="function"), 列出名称中含有 foo 的所有可用函数 。apropos支持正则表达式,例如apropos("z$")表示列出所有以z为结尾的变量。而apropos("[4-9]")则是含有4到9之间数字的所有变量。

data(),列出当前已加载包中所含的所有可用示例数据集

vignette() ,列出当前已安装包中所有可用的 vignette 文档,vignette指是一类小文章,会描述某个R函数的用法。

vignette("foo"),为主题 foo 显示指定的 vignette 文档

demo(),演示某些R案例

browseVignettes(),查看当前系统里的Vignettes

注:在搜索帮助文档的过程中,可能会遇到R软件无法给出任何搜索项的相关信息的情况,如下所示:

1
2
3
help(adf.test)
## No documentation for 'adf.test' in specified packages and libraries:
## you could try '??adf.test'

若你确定该函数安装在计算机中,则导致这样情况的原因可能是由于包含该函数的R包未载入,你不清楚哪个R包中包含这个函数。要解决这样的问题,需要在所有已安装的R包中搜索该函数。使用错误消息中提示的方法来进行搜索(即用help.search命令),例如:

1
2
3
help.search("adf.test")
## starting httpd help server ...
## done

vignette()

有些软件包中也会包含vignette,这是一些附加的文档,例如简介、教程或者开发文档等。这些vignette都会在安装软件包时,作为软件包的一部分安装到计算机中。vignette显示在软件包的帮助页面底部。可以通过vignette命令查看计算机中包含的所有软件包的附加文档列表,也可以通过在vignette命令中指定某一软件包的名称,查看特定软件包所附带的vignette?,如下所示:

1
vignette(package="ggplot2")

每个vignette都对应一特定的名称,因此可以通过以下命令进行查看:vignette(“vignettename”) 。

某看某个函数的文档

用法:help(函数名)或?函数名

1
help(mean)

或者使用args函数快速获取函数的参数。例如,args(functionname)

或者用example函数查看函数的使用示例。例如example(functionname)

查看某个包的文档

用法:help(package=”包的名称”)

需要与这区别的是,查看一个函数的帮助命令是help(函数名),如果要查看一个包的帮助,操作与函数有所不同,需要加上package=,如下所示:

1
2
help(mean) # 查看函数mean的帮助文档
help(package="ggplot2") # 查看包ggplot2的帮助文档

网络资源

Rseek.org

http://rseek.org

Q&A网站

http://stackoverflow.com

针对编程有关问题的Q&A网站,例如数据结构、代码以及图表绘制等。

有关统计的的Q&A网站

http://stats.stackexchange.com

R官网

http://cran.r-project.org/web/views

网站中的任务视图,寻找并阅读与你研究相关的内容,其中能找到链接和相关软件包的简介。

关键词检索软件包

通过关键字检索合适的软件包

http://crantastic.org

sos

提供查询R包的其他方式:

http://cran.r-project.org/web/packages/sos/vignettes/sos.pdf

环境配置

历史命令保留

默认情况下,R会将一次对话中所有的命令都记录下来,方便随时重用,如果要将历史记录保存下来,可以使用savehistory()这个函数。默认情况下,R会当历史记录保存在当前工作目录下一个名为.Rhistory的文件中。

如果要将历史记录保存在其他文件,可以使用file参数,即savehistory(file="TestHistory"),扩展名对此文件并无影响。

如果要再次载入这个历史记录,使用可以loadhistory()命令,即loadhistory("TestHistory")

查看R当前的版本

使用R.version()命令可以返回当前运行R的版本信息,包括运行平台本身的信息,比较丰富,如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
> R.Version()
$platform
[1] "x86_64-w64-mingw32"
$arch
[1] "x86_64"
$os
[1] "mingw32"
$system
[1] "x86_64, mingw32"
$status
[1] ""
$major
[1] "3"
$minor
[1] "5.2"
$year
[1] "2018"
$month
[1] "12"
$day
[1] "20"
$`svn rev`
[1] "75870"
$language
[1] "R"
$version.string
[1] "R version 3.5.2 (2018-12-20)"
$nickname
[1] "Eggshell Igloo"

如果只是想知道R的版本号,则用getRversion()函数,如下所示:

1
2
> getRversion()
[1] ‘3.5.2

设置R语言默认CRAN镜像

R使用的CRAN镜像信息保存在一个.RProfile为扩展名的文件中,这个文件位于用户的home文件夹或R的启动目录中,如果要想更改CRAN镜像就需要修改这个文件。

查看R语言可选的镜像要用到chooseCRANmirror()命名,如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
> chooseCRANmirror()
Secure CRAN mirrors
1: 0-Cloud [https] 2: Algeria [https]
3: Australia (Canberra) [https] 4: Australia (Melbourne 1) [https]
5: Australia (Melbourne 2) [https] 6: Australia (Perth) [https]
7: Austria [https] 8: Belgium (Ghent) [https]
9: Brazil (PR) [https] 10: Brazil (RJ) [https]
... ...
... ...
Selection:

选择19(上海的镜像)。

输入options("repos")[[1]][1]就可以查看选择后的镜像,如下所示:

1
2
3
> options("repos")[[1]][1]
CRAN
"https://mirrors.tongji.edu.cn/CRAN"

将上面的镜像添加到.RProfile文件中即可 ,如下所示:

1
options(repos="https://mirrors.tongji.edu.cn/CRAN")

R代码的运行source()

运行R代码的方式有以下几种:

第一,若要在控制台上执行编辑器中的某一行代码,点击想要运行的那行代码,在RStudio中,按下Ctrl+Enter或按Run即可。

第二,若要运行编辑窗口中的所有代码,那么就需要点击源代码编辑器中的任何位置,按下Ctrl+Shift+Enter即可,或者是按Source按钮。或者是在控制台中直接输入source("R代码的路径+R代码文件")即可,例如在D盘下保存了一个R代码文件test.r,那么就需要输入source("D:/test.r"),按回车。

需要注意的是:Rstudio的编辑窗口中有一个Source on Save复选框,这个是表示自动保存,最好选上。

Worksapce

在一次R任务中,会导入数据,会创建变量,这些所有的内容称为Worksapce,它具体指的是,在所有会话中创建的变量,函数,载入的包。如果要查看当前Worksapce中创建的哪些变量,可以使用ls()命令。

保存Workspace命令save.image()

如果想要保存整个Worksapce,要用到save.image()命令,如下所示:

1
2
3
4
setwd("D:/")
test1 <- c(1:4)
test2 <- rep(1:3, 4)
save.image(file="test.Rdata")

现在就在D盘下保存了一个名为test.Rdata的文件,现在关闭Rstudio。去D盘下,再打开test文件,发现原来的变量test1test2都还在,跟原来的一样。

Rda文件

Rda的全称是rdata,保存的是变量名与相应的多个变量,看以下代码:

1
2
3
4
setwd("D:/")
x <- c(1,2,3)
y <- c(4,5,6)
save(x,file="x.rda")

现在就在D盘保存了一个x.rda文件。当要载入这个文件时,要使用load()命令,如下所示:

1
2
3
rm(list=ls())
load("D:/x.rda")
x

save()save.image()函数使用

在R中如果要保存某个变量或工作环境需要用到save()save.iamge()命令,它们的用法如下所示:

1
2
3
4
5
6
7
8
9
Usage
save(..., list = character(),
file = stop("'file' must be specified"),
ascii = FALSE, version = NULL, envir = parent.frame(),
compress = isTRUE(!ascii), compression_level,
eval.promises = TRUE, precheck = TRUE)
save.image(file = ".RData", version = NULL, ascii = FALSE,
compress = !ascii, safe = TRUE)

其中参数含义如下所示:

  • list:一个包含要保存的对象名称的字符向量。
  • file:连接或保存数据的文件的名称。必须是保存的文件名。
  • ascii: ASCII码,默认FALSE。
  • envir: 寻找要保存的对象的环境。
  • compress:逻辑或字符串指定是否保存到指定文件是使用压缩。TRUE对应于gzip压缩,而字符串“gzip”、“bzip2”或“xz”指定压缩的类型。当文件是连接和工作空间格式版本时忽略。
  • save.image()只是“保存我当前工作空间”的捷径。

save()save.image()函数的简单区别就在前者只保存一个变量(也可以保存多个),而后者可以一次保存所有的变量。

ls()查看当前对象

例如ls()可以查看当前环境中的所有对象,如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
> a = 1:4
> b = c("a","b","C")
> ls()
[1] "a" "b"
> ls(pattern = "^is",baseenv()) # 列出base包中所有的以is开头的函数
# baseenv()表示返回base包中所有的环境
[1] "is.array" "is.atomic" "is.call"
[4] "is.character" "is.complex" "is.data.frame"
[7] "is.double" "is.element" "is.environment"
[10] "is.expression" "is.factor" "is.finite"
[13] "is.function" "is.infinite" "is.integer"
[16] "is.language" "is.list" "is.loaded"
[19] "is.logical" "is.matrix" "is.na"
[22] "is.na.data.frame" "is.na.numeric_version" "is.na.POSIXlt"
[25] "is.na<-" "is.na<-.default" "is.na<-.factor"
[28] "is.na<-.numeric_version" "is.name" "is.nan"
[31] "is.null" "is.numeric" "is.numeric.Date"
[34] "is.numeric.difftime" "is.numeric.POSIXt" "is.numeric_version"
[37] "is.object" "is.ordered" "is.package_version"
[40] "is.pairlist" "is.primitive" "is.qr"
[43] "is.R" "is.raw" "is.recursive"
[46] "is.single" "is.symbol" "is.table"
[49] "is.unsorted" "is.vector" "isatty"
[52] "isBaseNamespace" "isdebugged" "isFALSE"
[55] "isIncomplete" "isNamespace" "isNamespaceLoaded"
[58] "isOpen" "isRestart" "isS4"
[61] "isSeekable" "isSymmetric" "isSymmetric.matrix"
[64] "isTRUE"

ls.str()查看对象的类型

使用ls.str()命令可以查看变量的结构,如下所示:

1
2
3
> ls.str()
a : int [1:4] 1 2 3 4
b : chr [1:3] "a" "b" "C"

类似的函数还有browseEnv(),只是它是以HTML格式输出的,如下所示:

1
browseEnv()

工作空间管理

如果把R对象的运行方式比较为游戏规则,那么工作空间就可以看作游戏场地。如果要玩好游戏,你不仅需要熟悉 规则,也要熟悉场地,这里的规则就是指R语言的各种语法,这里的场地就是R语言的运行工作空间。

R语言的工作目录

当R开始运行时,它总是运行在某一个目录下的,这个目录就是R会话的工作目录,多数情况话,使用的就是绝对路径,例如C:\test这种工作,或者是使用相对路径,例如\test这样的。

在R中使用getwd()可以获取当前R的工作目录,使用setwd()是设置工作目录。

创建R项目

在Rstudio中要创建一个新项目就是使用File|New Project这个选项,具体的可以看Rstudio的实际操作。一旦创建了这个项目,就会在目录中创建一个扩展名为.Rproj文件,这个文件的核心内容其实就是几行代码。这个文件中储存了一些R的设置,一旦打开这个文件,这些设置就会启动,工作目录也将被设计为项目文件所在的位置,当我们进行一项数据分析任务时,最好就在Rstudio中创建一个.Rproj文件。

假设我们在Rstudio中创建了一个R项目,此时就会在设置的目录中创建了一个.Rproj文件,这个项目就包括R脚本,数据文件,文本文件,图表等。

检查工作环境

在R中,每个代码语句都是在指定环境中运行的,这个环境就是符号和其绑定物的集合,当我们当一个值赋给一个变量时,调用一个函数,或者对应一个函数名,R就会在当前的环境中寻找这个变量。如果在Rstudio的控制台中输入命令,它们会在全局环境中运行。例如当我们在Rstudio中开始一个新的R对话时,就是在一个空的全局环境中开始工作,这个空的全局环境就是没有定义任何变量的全局变量。

使用objects()这个命令就可以查看当前工作环境中的变量,如下所示:

1
2
3
4
5
6
x <- c(1, 2, 3)
y <- c("a", "b", "c")
z <- list(m = 1.5, n = c("x", "y", "z"))
objects()
ls()
ls.str()

运行结果如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
> x <- c(1, 2, 3)
> y <- c("a", "b", "c")
> z <- list(m = 1.5, n = c("x", "y", "z"))
> objects()
[1] "x" "y" "z"
> ls()
[1] "x" "y" "z"
> ls.str()
x : num [1:3] 1 2 3
y : chr [1:3] "a" "b" "c"
z : List of 2
$ m: num 1.5
$ n: chr [1:3] "x" "y" "z"

从上面结果可以看出来,这个工作空间中有三个变量,另外,使用ls()objects()的目的是一样的,但是ls()用的更多。使用ls.str()可以查看所有的变量的数据类型,此时也可以查看特定类型的,例如ls.str(mode = "list")就可以列出列表类型的变量,此命令还支持正则表达式,使用ls.str(patten = "^\\w$", mode = "list")就列出匹配了所有字符串的list变量。

修改全局选项

R语言中能够查看所有选项的值,例如getOption()就可以查看,如下所示:

1
2
> getOption("digits")
[1] 7

在查看某个参数时,要加上引号,从上面就可以知道,R中默认的数值是7位,使用options()可以改变显示位数,如下所示:

1
2
3
4
5
6
7
8
> 123.4567891011121314145
[1] 123.4568
> options(digits = 2)
> 123.4567891011121314145
[1] 123
> options(digits = 4)
> 123.4567891011121314145
[1] 123.5

查看R程序运行时间

proc.time()查看用户时间

R中的proc.time()函数可以查看程序运行时,其实proc就是程序procedure的缩写,如下所示:

1
2
3
> proc.time()
用户 系统 流逝
0.32 0.73 26.81

由于系统是中文的,R中显示的是中文,其中用户(user)表示:R执行用户指标的CPU运行时间;系统(system)是指:系统所需要的时间,流逝(elapsed)是指R打开到现在总共运行的时间。

system.time()查看程序运行时间

使用system.time()函数可以查看R程序的运行时间,其语法是system.time(expr,gcFirst = TRUE)

其中expr是需要运行的表达式,gcFirst是逻辑参数,system.time()这个函数实际上是调用了2次proc.time()函数,在程序运行前调用一次,在程序运行结束后又调用一次,然后计算这两次的时间差,如下所示:

1
2
3
4
system.time(for(i in 1:1000) mad(runif(1000)))
ptm <- proc.time() #将proc.time()的返回值保存到ptm对象里
for (i in 1:1000) mad(runif(1000))
proc.time() - ptm

运行结果如下所示:

1
2
3
4
5
6
7
8
> system.time(for(i in 1:1000) mad(runif(1000)))
用户 系统 流逝
0.17 0.00 0.17
> ptm <- proc.time() #将proc.time()的返回值保存到ptm对象里
> for (i in 1:1000) mad(runif(1000))
> proc.time() - ptm
用户 系统 流逝
0.15 0.00 0.16

再来看一个案例:

1
2
3
4
5
6
7
8
ptm <- proc.time()
x <- rnorm(100000)
y <- rnomr(100000)
z <- c()
for (i in 1:100000){
z <- c(z, x[i] + y[i])
}
proc.time() - ptm

运行结果如下所示:

1
2
3
4
5
6
7
8
9
10
11
> ptm <- proc.time()
> x <- rnorm(100000)
> y <- rnomr(100000)
Error in rnomr(1e+05) : could not find function "rnomr"
> z <- c()
> for (i in 1:100000){
+ z <- c(z, x[i] + y[i])
+ }
> proc.time() - ptm
用户 系统 流逝
14.42 1.05 15.68

从上面结果我们可以发现,这段程序运行的时间为:15.68秒,这是因为在R中,使用for循环非常没有效率,最好不要用for循环。在上面的这个案例中,程序每次都增加一个元素z向量里,这样总共增加了100000次,如果我们已经知道了z的长度,首先给定z的长度,就可以提高运行效率,如下所示:

1
2
3
4
5
6
7
8
ptm <- proc.time()
x <- rnorm(100000)
y <- rnomr(100000)
z <- rep(NA, 100000)
for (i in 1:100000){
z[i] <- x[i] + y[i]
}
proc.time() - ptm

运行结果如下所示:

1
2
3
> proc.time() - ptm
用户 系统 流逝
0.19 0.00 0.19

用了0.19秒。

参考资料

  1. R语言-默认镜像设置
  2. R语言轻松入门与提高 [法]Andrie de Vries ,[比利时]Joris Mey
  3. R语言_save()函数用法
  4. 学习R[美]Richard,Cotton著,刘军译
  5. R语言编程指南.任坤 著,王婷,赵孟韬,王泽贤 译