第 1 章 R语言入门

如果你之前从未用过R,这里做一个最基本的引导。

1.1 初识 R 语言

1.1.1 什么是 R 语言

R语言是一种开源的统计计算与绘图语言。是最流行的数据分析语言之一,在IEEE评选出的2018年编程语言排名中,R语言排名第7位(见 https://spectrum.ieee.org/static/interactive-the-top-programming-languages-2018 ),在TIOBE评选出的2018年12月编程语言排名中,R语言排名第16位(见 https://www.tiobe.com/tiobe-index/ )。R语言之所以叫R,部分是因为两位R的作者 (Robert Gentleman 和 Ross Ihaka) 的姓名,部分是受到了贝尔实验室 S语言的影响(称其为 S 语言的方言)。

IEEE编程语言排行榜(2018年)

IEEE编程语言排行榜(2018年)

TIOBE编程语言排行榜(2018年12月)

TIOBE编程语言排行榜(2018年12月)

1.1.2 为什么要用 R

R语言具有以下特点,这促使我们在数据分析中使用它:

  • 开源免费。
  • 语法简单易学。
  • 具有丰富的拓展包,提供了极为丰富的数据分析手段。

1.1.3 初学者如何学习 R

  1. 通过本教程到达入门的级别。
  2. 通过其他常见入门资源学习你需要但在这里还未涉及到的内容,常用的资源有
  3. 在实践中继续学习,多练习,多谷歌。
  4. 若需要查阅详细的R语言官方手册,可参考

1.1.4 编程环境搭建

  1. 下载并安装R:R是开源免费的,去R官网下载R安装包,建议选择清华镜像下载,如下图。选择适合你的系统,(Windows系统选择基础包(base)),之后按照引导下载并安装,不再赘述。我们之后的教程会以Windows系统上的R为基准,但一般也适合于其他系统。
R安装包下载:清华镜像

R安装包下载:清华镜像

  1. 下载并安装Rstudio:原则上来说,安装完R之后,就可以使用了,但是使用一个合适的集成开发环境(IDE)会让我们的操作方便很多,对R来说最常用的IED是Rstudio,我们以下的教程都以在Rstudio的开发环境中为基础,所以我建议读者也安装Rstudio。Rstudio也是开源免费的软件,分桌面版和服务器版,我们以下都以桌面版为例。去Rstudio官网,找到系统对应的安装包,按照引导下载并安装即可。

1.1.5 Rstudio界面介绍

打开Rstudio,会显示出类似于下面的界面,在常规的菜单栏与工具栏之下,主要有4个窗口,界面布局与MATLAB非常像。

  • 脚本窗口:用于编辑脚本,如R脚本等(如果未出现该窗口,用快捷键Ctrl+Shift+N新建一个脚本)。
  • 命令窗口:用于输入命令。
  • 变量历史等窗口:有4个标签页,Environment为环境窗口,可以暂时简单理解为查看变量的窗口;History为历史窗口,用于查看历史;其他标签页暂不介绍。
  • 文件等窗口:有5个标签页,Files用于查看与管理文件;Plot用于查看输出的绘图;Packages用于管理“包”,“包”的概念会在后面介绍;Help用于查看帮助文档。
Rstudio桌面介绍

Rstudio桌面介绍

1.1.6 组织 R 代码的3种方式

第一行R代码应该写在哪里?有3中选择:写在命令窗口中,写在R脚本中,写在Rmarkdown文档中,下面分别介绍。

  • 在命令窗口中写代码:写代码时,按Shift+Enter键为换行,按Enter键直接为执行,代码执行后便不可修改。因而在命令窗口中写代码一般只适合代码极为简单、与上下文代码不是一个整体的情况,比如试验某行代码的功能、查看帮助文档、检查某个值等。

  • 在R脚本中写代码:在脚本中的代码可以反复修改执行,保存为.R文件,是最常用的写代码的地方。写完之后,用光标选中需要执行的代码,点击上方的Run按钮,或按快捷键Ctrl+Enter,即可执行选中部分的代码。如果需要全部执行,全选(Ctrl+A)后按Ctrl+Enter。或者按Ctrl+Shift+Enter。如果光标没有选中任何代码,按Ctrl+Enter后,会执行光标所在那一行的代码。

  • 在Rmarkdown文档中写代码:如果需要写数据分析文档,需要较多的文字说明,则Rmarkdown是一个很好的选择,我们会在本教程第3部分详细介绍Rmarkdown。

本教程第1部分仅以在脚本中写代码为基础进行介绍。

1.1.7 编程工作流示例

1.1.7.1 Rstudio 项目(.Rproj)

我们建议在工作流中包含创建Rstudio项目的步骤,这里先对它做些说明:Rstudio项目是Rstudio用于管理一系列的相关文件的文件,是R脚本、环境变量、历史、工作路径、窗口设置等的集合,以.Rproj为后缀。创建Rstudio项目之后,关掉Rstudio,下次从该Rproj文件打开时,R脚本、环境变量、历史、工作路径、窗口设置等都会和上次关掉时的一样。可以同时打开多个Rproj文件,他们处于多个独立的Rstudio界面中,不会相互影响。如果仅仅创建R脚本,不创建Rstudio项目,则不同的R脚本只能处于同一个Rstudio界面中,共享一个工作路径,也共享环境变量,可能相互影响,这时两个R脚本不能同时运行。

1.1.7.2 工作流

下面为一个典型的R语言编程流程:

  1. 创建Rstudio项目:打开Rstudio,在菜单栏中点击File|New Project|New Directory|New Project,点击Browse,选择Rstudio项目文件夹所在的路径,在Directory name中填入Rstudio项目文件夹名,该文件夹不需要提前创建,Rstudio会自动创建这个文件夹,在该文件夹中会生成一个以该文件夹名为名的Rproj文件,以及一个隐藏的.Rproj.user文件夹,读者无需关注.Rproj.user文件夹中的内容。当路径或文件名包含中文字符时,可能出现意想不到的问题,建议路径与所有文件名都不包含中文。

  2. 创建R脚本:用快捷键Ctrl+Shift+N,或点击工具栏最左侧绿色圆底加号图标,选择R Script。

  3. 在R脚本中编写R代码。例如输入以下代码:

x <- 0:12
y <- sin(pi/5 * x)
op <- par(mfrow = c(3,3), mar = .1+ c(2,2,3,1))
for (tp in c("p","l","b",  "c","o","h",  "s","S","n")) {
   plot(y ~ x, type = tp, main = paste0("plot(*, type = \"", tp, "\")"))
   if(tp == "S") {
      lines(x, y, type = "s", col = "red", lty = 2)
      mtext("lines(*, type = \"s\", ...)", col = "red", cex = 0.8)
   }
}
par(op)

m <- matrix(data = c(1,2,3,4),nrow = 2,ncol = 2)
  1. 运行代码有3种方式可选:

    • 单行运行:按Ctrl+Enter执行光标所在的行;
    • 选中多行运行:选中需要执行的多行,按Ctrl+Enter;
    • 整个脚本全部运行:按Ctrl+Shift+Enter或Ctrl+Shift+S,二者得到结果相同,区别仅在于,前者会将执行的代码都显示在命令窗口中,后者只显示一条source语句。
  2. 查看结果:图片显示在Plot窗口中,变量的值显示在Environment窗口中,如下图所示。如果变量为矩阵或数据框等高维数据格式,点击该变量,会在脚本编辑窗口位置弹出该变量详细信息的窗口。

结果展示

结果展示

结果展示

结果展示

  1. 保存结果:如果想保存图片,点击Plots窗口中的Export,按引导进行保存。如果想保存数据,单纯为下次运行R时使用,可点击Environment中的保存图标,保存为.RData数据,下次导入该数据时可以双击.RData文件,或在命令窗口中输入load(“文件路径/文件名.RData”)。导出为CSV、Excel等其他文件格式,我们会在文件导入导出章中详细讲述。

1.1.8 Rstudio 中常用快捷键

  • 脚本编辑窗口:
    • 新建脚本:Ctrl+Shift+N
    • 代码提示与补全:Tab
    • 注释或取消注释:Ctrl+Shift+C
    • 运行所选代码:Ctrl+Enter
    • 运行全部代码:Ctrl+Shift+Enter
    • 全选:Ctrl+A
    • 选择:Shift+箭头
    • 删除行:Ctrl+D
    • 撤销:Ctrl+Z
    • 重做:Ctrl+Shift+Z
    • 赋值符:Alt+-
    • 代码折叠:Alt+L
    • 代码展开:Shift+Alt+L
    • 保存本脚本:Ctrl+S
    • 保存全部脚本:Ctrl+Alt+S
    • 增加缩进:选中代码后,Tab(可包括多行)
    • 减小缩进:选中代码后,Shift+Tab
    • 智能缩进:选中代码后,Ctrl+I
    • 智能缩进加智能空格:Ctrl+Shift+A(更高级的代码格式规范化工具,可参考formatR包)
    • 选择与替换:Ctrl+F
    • 提取函数:Ctrl+Alt+X(RStudio 可以分析某一代码段,并自动将其转换成一个可重复使用的函数。任何在选择的代码内的“自由的”变量,即那些被引用但没有被创建的变量,将被转化为函数的参数)
  • 命令窗口中:
    • 历史中的上一条命令:向上箭头
    • 历史中的下一条命令:向下箭头
    • 中断运行的代码:Esc
    • 清除命令窗口中的内容:Ctrl+L

1.2 R 语言语法基础

1.2.1 数据类型

R中常用的数据类型(type)包括整数(integer)、浮点数(double)、复数(complex)、字符串(character)、逻辑值(logical)。此外还有原生型(raw)等,此处不做介绍。

直接输入单个整数,被视为浮点数,如需要其必须为整数型,需要在整数后加大写L,如1L。在形如m:n的序列中的元素被直接视为整数型。R中整数用32-bit存储,其范围大致在+/-2e9之内,不存在普通整数型与长整数型(long)之间的区别。

一般小数与科学计数法都被识别为浮点数,不存在单精度浮点与双精度浮点数之间的区别,浮点数以53-bit存储,其精度范围大致在2e-308到2e+308之间,范围比整数型大很多。

R可处理复数,如2.4-5.6i,虚数符号用i,不能用j。虚数符号与虚部之间没有乘号。更复杂的创建虚数的方式可用函数complex

被单引号或双引号括起来的内容为字符串,对单字符与字符串不作区分。单引号与双引号没有区别,但需要对应。如果字符串中包含单引号,可用双引号括起来。如果字符串包含双引号,可用单引号括起来。如果既包括单引号,也包括双引号,则需要在引号前加上转义字符\,在外面任意选用单引号或双引号括起来。引号之间的内容可以跨行。

逻辑值包括TRUEFALSE两种,所有字母必须大写,可简写为TF

typeof函数可以识别变量的类型。

常见数据类型
数据类型 英文名称 例子
整数 integer 1L -3L
浮点数 double 3.14 -5.1e-3
复数 complex 1+1i 2.4-5.6i
字符串 character "Hello World!" 'a'
逻辑值 logical TRUE FALSE

下面介绍几个相关的概念:

  • 模式(mode):数据的模式与类型(type)非常像,典型的差异仅仅为,将整数型"integer"和浮点型"double"统称为数值型"numeric"。用mode函数可以识别变量的模式。

  • 类(class):任意一个R对象(object)都可以被赋予一个类的属性(attribute),如果在被幅值时没有被指定,则有一个默认的类,包括矩阵"matrix"、数组"array"、 函数"function"mode返回的结果。用class函数可以识别变量的类。

  • 结构(structure):数据的结构是单个数据元素组合在一起的形式,常见的数据结构包括向量(vector)、列表(list)、矩阵(matrix)、数据框(data.frame)、数组(array)、时间格式(POSIXltPOSIXlt)等,用函数str可查看数据的结构。我们将在下一章介绍对不同数据结构的操纵。

1.2.2 标识符命名

R中的标识符命名包含以下规则:

  • 可包含大小写字母a~zA~Z、下划线_和小数点.,不能包含其他符号。
  • 对大小写敏感。
  • 只能以字母或点开头,不能以数字或下划线开头,当以点开头时,第一个点之后不能紧接着为数字。
  • 不能与其他保留命名符重复,保留标志符如下表,可通过在命令窗口中输入?reserved查看。(参考自 https://www.tutorialspoint.com/r/r_variables.htm

下面为一些例子:

标识符命名合法性例子
变量名 是否合法 原因
var_name2. 可包含字母、数字、下划线和点
var_name% 不可包含百分号等其他符号
2var_name 不能以数字开头
.var_name 可以以点开头
var.name 可以包含点
.2var_name 以点开头时,其后不能紧接着数字
_var_name 不能以下划线开头
R中的保留标识符
if else repeat while function
for in next break TRUE
FALSE NULL Inf NaN NA
NA_integer _ NA_real_ NA_complex _ NA_characte r_ …

以上是命名合法性的问题,在合法的命名中,还涉及命名风格和规范的问题,好的命名风格方便与他人协同工作。主流的R编程风格有两种:谷歌R编程风格 https://google.github.io/styleguide/Rguide.xml 和 Hadley Wickham (Rstudio 首席数据科学家)的R编程风格 http://adv-r.had.co.nz/Style.html

1.2.3 内置常量

R中有一些内置常量,我们可以直接使用。变量的命名符可以和内置常量重名,但我们推荐避免用内置常量名来对变量命名,以防造成混淆。

LETTERS
##  [1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P" "Q"
## [18] "R" "S" "T" "U" "V" "W" "X" "Y" "Z"
letters
##  [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q"
## [18] "r" "s" "t" "u" "v" "w" "x" "y" "z"
pi
## [1] 3.141593
month.name
##  [1] "January"   "February"  "March"     "April"     "May"      
##  [6] "June"      "July"      "August"    "September" "October"  
## [11] "November"  "December"
month.abb
##  [1] "Jan" "Feb" "Mar" "Apr" "May" "Jun" "Jul" "Aug" "Sep" "Oct" "Nov"
## [12] "Dec"

1.2.4 运算符

赋值,可以用<-<<-=,甚至可以反转赋值,如5->a,但最常用的是<-,我们建议读者使用<-,且不要将不同赋值符号混用。

可以进行连续赋值,如a <- b <- c <- 6

此外,赋值可以用赋值函数assign,它适合于被赋值的函数名不能直接确定,而由其他变量生成的情况,下面是一个例子

i <- 3
assign(paste0('myVar', i), 1:5)
myVar3
## [1] 1 2 3 4 5

其他常见运算符如下:

  • 算数运算
    • 加:+
    • 减:-
    • 乘:*
    • 除:/
    • 取模(余数):%%
    • 整除:%/%
    • 乘方:^或**
  • 关系运算
    • 大于:>
    • 小于:<
    • 大于等于:>=
    • 小于等于:<=
    • 等于:==
    • 不等于:!=
  • 逻辑运算
    • 向量各元素分别求:&
    • 向量各元素分别求:|
    • 向量各元素分别求:!
    • 向量第1个元素求:&&
    • 向量第1个元素求:||
  • 其他
    • 结合律括号、函数括号:( )
    • 代码块括号:{ }
    • 单行代码分隔:;
    • 索引:[ ] [[ ]]
    • 创建数列::
    • 使用名称访问变量::: :::
    • 元素提取:$
    • 位置提取:@
    • 公式:~
    • 帮助:?
    • 转义字符:\
    • 特殊运算符:%任意特殊符号,支持自定义%

运算符的优先级按下面的表给出,上面的优先级高于下面:

运算符优先级
运算符 含义
[ ] [[ ]] 索引
:: ::: 使用名称访问变量
$ @ 元素提取、位置提取
^ 乘方(从右到左)
- + 负、正
: 创建数列
%任意% 特殊运算符
* / 乘、除
+ - 加、减
== != < > <= >= 比较运算符
! 逻辑非
& && 逻辑与
| || 逻辑或
~ 公式
-> ->> 向右赋值
= 赋值(从右向左)
<- <<- 赋值(从右向左)
? 帮助

1.2.5 换行

一般来说,1行代码会被识别为1条语句。代码之后无需结束符号。也可以用1行代码执行多条语句,每条代码之间用分号;分隔。当1条语句太长,也可以分在多行,但对换行位置有要求,一般为逗号、二元连接符、前括号之后。如果是字符串过长,又不希望其中有换行符号,可以用paste0函数将多行字符串连接起来。如

string1 <- "this is a long string 
with \n"
string2 <- paste0("this is a long string ",
                  "without \n")
string1
## [1] "this is a long string \nwith \n"
string2
## [1] "this is a long string without \n"

1.2.6 代码块与缩进

R中用大括号{ }将代码块包围,作为一个整体。

代码缩进对程序运行没有影响,但影响可读性,一般缩进2个空格。在Rstudio中,会自动缩进。

1.2.7 注释

井号#右侧的文字都会被认为是注释,R中没有多行注释。注释与取消注释的快捷键是Ctrl+Shift+C,可同时对多行用快捷键进行注释。

1.2.8 控制流

1.2.8.1 条件语句

最基础的用if来表达条件语句,下面是几个例子

# 只有一个if的情况
if (statement1) {
  statement2
}

# 一个if和一个else的情况
if (statement1) {
  statement2
} else {
  statement3
}

# 多个if和else的情况
if (statement1) {
  statement2
} else if (statement3) {
  statement4
} else if (statement5) {
  statement6
} else {
  statement7
}
  

if后面括号中的值只能是长度为1的逻辑值,而不能是逻辑值组成的向量(如果是向量,只取第1个值进行判断)。如果需要向量化判断,用ifelse语句,其用法为ifelse(test, yes, no),对于向量test中的每一个元素,如果为TRUE,返回yes向量中对应的值,如果为FALSE,返回no向量中对应的值,下面是一个例子。

x <- c(6:-4)
y <- sqrt(ifelse(x >= 0, x, NA))

如果需要多重向量化判断,可以用下面的方式

a <- ifelse(test1, yes1,
            ifelse(test2, yes2,
                   ifelse(test3, yes3,
                          no)))

或者在for循环里用普通的ifelse语句。

如果条件分支过多,且判断条件为离散匹配情况,可以使用switch语句,判断条件为数值条件或字符串条件时,switch语句的用法不同。

对数值条件来说,用法为switch(n,ret1,ret2,ret3,...)。其中的n为正整数,n为多少,就返回其后第几个结果,如果n超出范围,则返回NULL。例如

n <- 1
switch(n,"red","green","blue")
## [1] "red"
n <- 2
switch(n,"red","green","blue")
## [1] "green"
n <- 4
x <- switch(n,"red","green","blue")
x
## NULL
n <- 0
y <- switch(n,"red","green","blue")
y
## NULL

对字符串条件来说,其用法为

switch(condition.string, 
         case.str1=ret1,
         case.str2=ret2,
         case.str2=ret2,
         ...)

当条件字符串condition.string与第N中可能的字符串case.strN匹配时,返回对应的结果。

下面是一个具体的例子

s <- "color"
switch(s, "color" = "red", "shape" = "square", "length" = 5)
## [1] "red"
s <- "length"
switch(s, "color" = "red", "shape" = "square", "length" = 5)
## [1] 5

1.2.8.2 循环语句

循环语句包括forwhilerepeat,下面依次介绍:

for的用法如下

for(var in seq) {
  expr
}

seq为向量或列表,循环遍历seq中的每一个元素,代替表达式expr中包含var的地方。两种典型的用法如下:

a <- double(5)
for (i in 1:length(a)) {
  a[i] <- i^2
}
a
## [1]  1  4  9 16 25
b <- list("Appale",1,FALSE)
item.mode <- character()
for (item in b) {
  item.mode <- c(item.mode,mode(item))
}
item.mode
## [1] "character" "numeric"   "logical"

一般而言,利用向量化的操作要比用循环对元素进行操作要更有效率,且代码更加简洁易读。所以能用向量化的操作时应尽量用向量化操作,而避免用循环操作。比如以上代码用向量化操作可以写为:

a <- (1:5)^2
a
## [1]  1  4  9 16 25
b <- list("Appale",1,FALSE)
item.mode <- sapply(b,mode)
# 注意不同于
# item.mode <- mode(b) # 它将返回"list""
item.mode
## [1] "character" "numeric"   "logical"

while的用法如下

while (cond) {
  expr
}

当条件cond满足时,重复执行表达式expr,直到条件cond不满足为止。下面是一个例子

i <- 1
while (i < 6) {
  print(i)
  i = i + 1
}
## [1] 1
## [1] 2
## [1] 3
## [1] 4
## [1] 5

repeat的用法如下

repeat {
  expr
}

重复执行表达式expr,直到其中的break语句起效跳出循环为止。下面是一个例子

x <- 1
repeat {
  print(x)
  x <- x + 1
  if (x == 6) {
    break
  }
}
## [1] 1
## [1] 2
## [1] 3
## [1] 4
## [1] 5

break语句为跳出整个循环,而next语句则是跳出当前循环,进入下一个循环。

1.2.9 函数

1.2.9.1 函数参数

函数的定义方法如下:

FuncName <- function (arglist) {
  expr
  return(value)
}

函数名在赋值号左边,function之后的括号中为参数列表,多个参数用逗号分隔,默认参数的默认值与该参数用等号连接。return语句给出返回结果,如果不写return语句,则将函数最后一个赋值语句作为返回值。如果不想返回任何对象,则可以将return的参数空缺,即写为return()

当使用参数时,如果没有指定参数名,则按顺序赋值,如果指定了参数名,可以不按顺序赋值。对于已经指定了默认值的参数,可以在使用时不指定参数值。

pow <- function(x, y = 2) {
  result <- x ^ y
  return(result)
}

a <- 2
b <- 3
d <- pow(a, b)
d
## [1] 8
e <- pow(x = a, y = b)
e
## [1] 8
f <- pow(y = a, x = b)
f
## [1] 9
g <- pow(x = a)
g
## [1] 4
# 以下会报错,因为没有指定参数x的值
# h <- pow(y = a)
# h

R中可包含匿名函数,下面是一个例子

lapply(lst, function(x) sd(x)/mean(x))

R语言的执行顺序是自上而下每条语句依次执行,所以要使用一个函数,必须在这行代码之前就定义了函数,而不能将函数定义写在函数调用之后。如果需要调用其他脚本中的函数,则使用source函数,source的参数为脚本名而非函数名,需要用引号括起来。如果该脚本不在工作路径中,还需要在前面添加路径,如source("PowScript.R")source("other/path/PowScript.R")。这样相当于PowScript.R脚本中的所有代码全部复制一遍放在了这一行代码处。所以,如果该脚本中有其他函数或其他代码,也都会起作用。防止出问题最好的方式是,在被调用的脚本中只包含函数定义,不包含其他代码。

如果调用包中的函数,先安装包,然后用library函数加载包。

1.2.10

常用的R包:可参考 https://support.rstudio.com/hc/en-us/articles/201057987-Quick-list-of-useful-R-packages

按应用领域分类的R包,可参考 https://cran.r-project.org/web/views/

  • 包的安装:用install.packages("包的名字")
  • 包的加载:用library(包的名字)
  • 从环境中移除包:detach("package:包的名字", unload=TRUE)
  • 卸载包:remove.packages("包的名字")

1.2.11 常用数学函数

常用数学函数1

常用数学函数1

常用数学函数2

常用数学函数2

1.2.12 常用统计函数

常用统计函数

常用统计函数

协方差用cov()

1.2.13 常用概率函数

概率函数分为4类:密度函数、分布函数、分位数函数、生成随机数。根据不同的分布,又分为正态分布、均匀分布等等,二者组合成为具体的函数,在R中,前面4种类型用下面字母打头,之后的函数如下表所示:

  • d = 密度函数( density)
  • p = 分布函数( distribution function)
  • q = 分位数函数( quantile function)
  • r = 生成随机数(随机偏差)
常用概率函数

常用概率函数

比如正态分布的密度函数为dnorm

1.2.14 其他常用函数

可参考 http://adv-r.had.co.nz/Vocabulary.html

1.2.15 管理工作空间

工作空间中储存着当前项目中的对象,包括变量、函数等。它处于工作路径之中,在R中,对于所有操作系统,工作路径的分隔符都用正斜杠/表示,而反斜杠\专用于转义字符,所以,对Windows用户来说,需要将Windows系统中默认的路径分隔符反斜杠\改为正斜杠/

清除工作空间中的所有变量:rm(list =ls())

R中常用的管理工作空间的命令见下图:

R管理工作空间的命令

R管理工作空间的命令

命令ls(all.names=TRUE)可得到包含隐藏变量(以点开头的变量)的列表。

得到上次运行的结果:用.Last.value

查看已经载入的包:search()。查看已经安装的包library()

如果想在不载入某个包的情况下,使用该包的某个数据,则可用data(dsname,package="pkgname")

1.2.16 获取帮助

获取函数的帮助:在命令窗口中输入问号?,后接函数名,函数名后面可不加括号,执行后显示函数的帮助文档。

获取包的帮助:用命令help(package="包的名字")

获取函数源代码:在命令窗口中输入函数,后面不加括号,点回车后显示函数源码。但有时候这个函数可能是一个类函数(Generic Function),如plot函数,上面的方法就需要稍稍改进一下:先使用methods() 函数来查看这个类函数的列表,找到具体需要的函数,如plot.default,写出来,回车。

获取特殊符号的帮助,如[[if,用help("特殊符号")

其他帮助命令见下图:

R帮助命令

R帮助命令

1.2.17 调试

可以点击行号左侧设置断点,也可以在代码中插入browser()函数,当执行到此处时,代码中断,进入调试模式。此处执行指的是Source(Ctrl+Shift+S)或Source with Echo(Ctrl+Shift+Enter),不能是直接Run(Ctrl+Enter)。