2 基本原理与概念 如果R已经被安装在你的计算机中,它就能立即运行一些可执行的命令 了。R默认的命令提示符是>',它表示正在等待输入命令。如在Windows系 统中打开Rgui.exe,就能直接运行下拉菜单中的一些操作命令(如在线帮助, 打开文件..)。到这里,有些人可能会急着想知道更多的语句命令。其实,在 学习这些内容前,了解掌握一些R的基本工作原理是非常有必要的。这正是本 章所要讲的主要内容。 本章首先简要描述R的工作原理。在第二节中,我将介绍一些基本的赋 值分配(“assign”)的操作,如怎样产生对象(object),如何操作管理这些对象 等最后简要介绍R中非常有用的在线帮助。 2.1基本原理 因为R是一种编程语言,一些对编程不太熟悉的人可能会望而却步。这种 障碍其实是完全没有必要,首先,R是一种解释型语言,而不是编译语言,也 就意味着输入的命令能够直接被执行,而不需要像一些语言要首先构成一个 完整的程序形式(如C,Fortan,Pascal,..)。 第二,R的语法非常之简单和直观。例如,线性回归的命令1m(y~x)表 示“以x为自变量,y为反应量来拟合一个线性模型”。合法的R函数总是带有 圆括号的形式,即使括号内没有内容(如,1s())。如果直接输入函数名而不输 入圆括号,R则会自动显示该函数的一些具体内容。在本手册中除在部分文字 己作出清楚的说明外,所有的函数后都接有圆括号以区别于对象(object)。 当R运行时,所有变量,数据,函数及结果都以对象(objects)的形式存 在计算机的活动内存中,并冠有相应的名字代号。我们可以通过用一些运算 符(如算术,逻辑,比较等)和一些函数(其本身也是对象)来对这些对象进行操 作。运算操作非常简单,其细节将留在下章讨论(p.26).关于R中的函数可用 下面的图例来形象的描述: arguments function ↑ →result options default arguments 上图中的参量(argument)可能是一些对象(如数据,方程,算式..)。有 些参量在函数里被预设为缺省值,用户则可按需对其作个别的修改。所以运 行一个R函数可能不需要设定任何参量,原因是所有的参量都可以被默认为缺 3
2 基本原理与概念 如果R已经被安装在你的计算机中,它就能立即运行一些可执行的命令 了。R默认的命令提示符是‘>’,它表示正在等待输入命令。如在Windows系 统中打开Rgui.exe,就能直接运行下拉菜单中的一些操作命令(如在线帮助, 打开文件. . . )。到这里,有些人可能会急着想知道更多的语句命令。其实,在 学习这些内容前,了解掌握一些R的基本工作原理是非常有必要的。这正是本 章所要讲的主要内容。 本章首先简要描述R的工作原理。在第二节中,我将介绍一些基本的赋 值分配(“assign”) 的操作,如怎样产生对象(object),如何操作管理这些对象 等.最后简要介绍R中非常有用的在线帮助。 2.1 基本原理 因为R是一种编程语言,一些对编程不太熟悉的人可能会望而却步。这种 障碍其实是完全没有必要,首先,R是一种解释型语言,而不是编译语言,也 就意味着输入的命令能够直接被执行,而不需要像一些语言要首先构成一个 完整的程序形式(如C,Fortan, Pascal, . . . )。 第二,R的语法非常之简单和直观。例如,线性回归的命令lm(y ~ x) 表 示“以x为自变量,y为反应量来拟合一个线性模型”。合法的R函数总是带有 圆括号的形式,即使括号内没有内容(如,ls())。如果直接输入函数名而不输 入圆括号,R则会自动显示该函数的一些具体内容。在本手册中除在部分文字 已作出清楚的说明外,所有的函数后都接有圆括号以区别于对象(object)。 当R运行时,所有变量,数据,函数及结果都以对象(objects)的形式存 在计算机的活动内存中,并冠有相应的名字代号。我们可以通过用一些运算 符(如算术,逻辑,比较等)和一些函数(其本身也是对象)来对这些对象进行操 作。运算操作非常简单,其细节将留在下章讨论(p. 26). 关于R中的函数可用 下面的图例来形象的描述: arguments −→ options −→ function ↑ default arguments =⇒result 上图中的参量(argument)可能是一些对象(如数据,方程,算式. . . )。有 些参量在函数里被预设为缺省值,用户则可按需对其作个别的修改。所以运 行一个R函数可能不需要设定任何参量,原因是所有的参量都可以被默认为缺 3
省值,当然也有可能该函数本身就不含任何参量。由于这里主要是讲述R的工 作原理,对R函数的介绍将不再展开,在后面的章节中我们会看到关于构建及 使用各种函数的详细内容(p.68)。 在R中进行的所有操作都是针对存储在活动内存中的对象的,因此就不涉 及到任何临时文件夹的使用(Fg.1)。对数据,结果或图表的输入与输出都 是通过在对计算机硬盘中的文件读写而实现。用户通过输入一些命令调用函 数,分析得出的结果可以被直接显示在屏幕上,也可以被存入某个对象或被 写入硬盘(如图片对象)。因为产生的结果本身就是一种对象,所以它们也能被 视为数据并能像一般数据那样被处理分析。数据文件即可从本地磁盘读取也 可通过网络传输从远程服务器端获得。 ../1ibrary/base/ keyboard commands /stast/ library of functions and operators /graphics/ mouse 44 functions data data”objects files internet screen “results”objects Active memory Hard disk 图1:R工作原理示意图 所有能使用的R函数都被包含在一个库(library)中,该库存放在磁盘 的RHOME/library目录下(R.HOME是最初安装R的地址)。这个目录下含 有具有各种功能的包(packages),各个包也是按照目录的方式组织起来的。 其中名为base的包可以算是R的核心,因为它内嵌了R语言中所有像数据读写 与操作这些最基本的函数。在上述目录中的每个包内,都有一个子目录R, 这个目录里又都含有一个与此包同名的文件(例如在包base中,有这样一个文 件RHOME/library/base/R/base)。该文件正是存放所有函数的地方。 R语言中最简单的命令莫过于通过输入一个对象的名字来显示其内容了。 例如,一个名为n的对象,其内容是数值10: >n [1]10 方括号中的数字1表示从n的第一个元素开始显示。其实该命令的功能在 4
省值,当然也有可能该函数本身就不含任何参量。由于这里主要是讲述R的工 作原理,对R函数的介绍将不再展开,在后面的章节中我们会看到关于构建及 使用各种函数的详细内容(p. 68)。 在R中进行的所有操作都是针对存储在活动内存中的对象的, 因此就不涉 及到任何临时文件夹的使用(Fig. 1)。对数据,结果或图表的输入与输出都 是通过在对计算机硬盘中的文件读写而实现。用户通过输入一些命令调用函 数,分析得出的结果可以被直接显示在屏幕上,也可以被存入某个对象或被 写入硬盘(如图片对象)。因为产生的结果本身就是一种对象,所以它们也能被 视为数据并能像一般数据那样被处理分析。数据文件即可从本地磁盘读取也 可通过网络传输从远程服务器端获得。 functions and operators ❄ “data” objects ❄ ✻ ✏✏ ✏✮✏ ❳❳❳❳❳❳❳③ “results” objects .../library/base/ /stast/ /graphics/ ... library of functions ✛ data files ✛ ✲ ✛ internet PS JPEG . . . keyboard mouse ✲ commands screen Active memory Hard disk 图 1: R工作原理示意图. 所有能使用的R函数都被包含在一个库(library) 中, 该库存放在磁盘 的R HOME/library 目录下(R HOME 是最初安装R的地址)。这个目录下含 有具有各种功能的包(packages ),各个包也是按照目录的方式组织起来的。 其中名为base的包可以算是R的核心,因为它内嵌了R语言中所有像数据读写 与操作这些最基本的函数。在上述目录中的每个包内,都有一个子目录R, 这个目录里又都含有一个与此包同名的文件(例如在包base中,有这样一个文 件R HOME/library/base/R/base)。该文件正是存放所有函数的地方。 R语言中最简单的命令莫过于通过输入一个对象的名字来显示其内容了。 例如,一个名为n的对象,其内容是数值10: > n [1] 10 方括号中的数字1表示从n的第一个元素开始显示。其实该命令的功能在 4
这里于函数orint相似,输出结果与print(n)相同(但有些情况下,例如内嵌 在一个函数或循环中时,就必须得用print函数)。 对象的名字必须是以一个字母开头(A-Z或-z,中间可以包含字母,数 字(0-9),点()及下划线().因为R对对象的名字区分大小写,所以x和X就可 以代表两个完全不同的对象(在Windows:操作系统中也是如此)。 2.2对象的产生,排列及删除 一个对象可以通过赋值操作来产生,R语言中的赋值(“assign”)符号一般 是由一个尖括号与一个负号组成的箭头形标志。该符号可以是从左到右的方 向,也可以相反: >n<-15 >n [1]15 >5->n n [1]5 >x<-1 >X<-10 X [1]1 >X [1]10 如果该对象已经存在,那么它以前的值将会自动被新值冲掉(这种修改只 会影响内存中的数据,操作结果暂时不会被保存到硬盘中)。在R中给对象赋 值有多种形式,可以是直接赋一个数值,也可以是一个算式或一个函数的结 果: >n<-10+2 >n [1]12 n <-3 +rnorm(1) >n [1]2.208807 运行rnorm(1)将产生一个服从平均数为0标准差为1的标准正态分布的随 机变量(p.18)。当然你也可以只是输入函数或表达式而不把它的结果赋给某 个对象,但如果这样在窗口中展示的结果将不会被保存到内存中: 5
这里于函数print 相似,输出结果与print(n) 相同(但有些情况下,例如内嵌 在一个函数或循环中时,就必须得用print函数)。 对象的名字必须是以一个字母开头(A–Z 或a–z), 中间可以包含字母,数 字(0–9),点(.)及下划线( ). 因为R对对象的名字区分大小写,所以x 和X就可 以代表两个完全不同的对象(在Windows操作系统中也是如此)。 2.2 对象的产生,排列及删除 一个对象可以通过赋值操作来产生,R语言中的赋值(“assign”) 符号一般 是由一个尖括号与一个负号组成的箭头形标志。该符号可以是从左到右的方 向,也可以相反: > n <- 15 > n [1] 15 > 5 -> n > n [1] 5 > x <- 1 > X <- 10 > x [1] 1 > X [1] 10 如果该对象已经存在,那么它以前的值将会自动被新值冲掉(这种修改只 会影响内存中的数据,操作结果暂时不会被保存到硬盘中)。在R中给对象赋 值有多种形式,可以是直接赋一个数值,也可以是一个算式或一个函数的结 果: > n <- 10 + 2 > n [1] 12 > n <- 3 + rnorm(1) > n [1] 2.208807 运行rnorm(1) 将产生一个服从平均数为0标准差为1的标准正态分布的随 机变量(p. 18)。当然你也可以只是输入函数或表达式而不把它的结果赋给某 个对象,但如果这样在窗口中展示的结果将不会被保存到内存中: 5
>(10+2)*5 [1]60 本文中,在不影响读者理解的情况下,一些赋值符号将会被省略。 函数1s的功能是显示所有在内存中的对象:只会列出对象名,如: >name<-"Carmen";n1<-10;n2<-100;m<-0.5 >1s() [1]"m" "n1""n2""name" 注意在R中应该用分号来隔开同一行中的不同命令语句。如果只要显示出 在名称中带有某个指定字符的对象,则通过设定选项pattern来实现(可简写 为pat)) >ls(pat "m") [1]"m" "name" 如果进一步限为显示在名称中以某个字母开头的对象,则可: 1s(pat ="m") [1]"m" 运行函数1s.str()将会展示内存中所有对象的详细信息: 1s.str() m:num 0.5 n1 num 10 n2 num 100 name chr "Carmen" 选项pattern在这里同样适用。在ls.str函数中另一个非常有用的选 项是max.level.,它将规定显示所有关对象信息的详细级别。缺省情况 下,1s.str将会列出关于对象的所有信息,包括数据框,矩阵,数据列 表的列数信息。因此展示结果可能会很长。但如果设定max.leve1=-1就可 以避免这种情况了: M <-data.frame(n1,n2,m) >ls.str(pat "M") M:‘data.frame': 1 obs.of 3 variables: n1:num 10 $n2:num100 $m num 0.5 1s.str(pat="M",max.level=-1) M:‘data.frame': 1 obs.of 3 variables: 要在内存中删除某个对象,可利用函数rm:运行rm(x)将会删除对象x,运 行rm(x,y)将会删除对象x和y,而运行rm(Iist=ls(O)则会删除内存中的所有对 象.在上面所讲的1s()函数中的一些选项同样也可以运用到rm中来,以选择 的删除一些对象,如:rm(1ist=ls(pat="m"))。 6
> (10 + 2) * 5 [1] 60 本文中,在不影响读者理解的情况下,一些赋值符号将会被省略。 函数ls的功能是显示所有在内存中的对象:只会列出对象名,如: > name <- "Carmen"; n1 <- 10; n2 <- 100; m <- 0.5 > ls() [1] "m" "n1" "n2" "name" 注意在R中应该用分号来隔开同一行中的不同命令语句。如果只要显示出 在名称中带有某个指定字符的对象,则通过设定选项pattern 来实现(可简写 为pat) ): > ls(pat = "m") [1] "m" "name" 如果进一步限为显示在名称中以某个字母开头的对象,则可: > ls(pat = "^m") [1] "m" 运行函数ls.str()将会展示内存中所有对象的详细信息: > ls.str() m : num 0.5 n1 : num 10 n2 : num 100 name : chr "Carmen" 选项pattern在这里同样适用。在ls.str函数中另一个非常有用的选 项是max.level, 它将规定显示所有关对象信息的详细级别。缺省情况 下,ls.str 将会列出关于对象的所有信息,包括数据框,矩阵,数据列 表的列数信息。因此展示结果可能会很长。但如果设定max.level =-1 就可 以避免这种情况了: > M <- data.frame(n1, n2, m) > ls.str(pat = "M") M : ‘data.frame’: 1 obs. of 3 variables: $ n1: num 10 $ n2: num 100 $ m : num 0.5 > ls.str(pat="M", max.level=-1) M : ‘data.frame’: 1 obs. of 3 variables: 要在内存中删除某个对象,可利用函数rm: 运行rm(x)将会删除对象x,运 行rm(x,y) 将会删除对象x和y,而运行rm(list=ls())则会删除内存中的所有对 象. 在上面所讲的ls() 函数中的一些选项同样也可以运用到rm中来,以选择 的删除一些对象,如: rm(list=ls(pat="^m"))。 6
2.3在线帮助 R中给予的在线帮助能提供关于如何使用函数的非常有用的信息。关于某 个特定函数的帮助能够直接被调出来,如运行: >?1m 会立即显示关于函数1m()(线性模型)的帮助页面。命令help(1m)和help("1m") 具有同样的效果。但在查询关于某特殊语法意义字符的帮助时必须用后一种 形式,如: >?* Error:syntax error >help("*") Arithmetic package:base R Documentation Arithmetic Operators .. 启动帮助将会打开一个页面(取决于操作系统),第一行一般会显示某函数 或操作命令的所属的包(package),然后是标题,标题下面是则是一些详细信 息。 Description:brief description. Usage:for a function,gives the name with all its arguments and the possible options (with the corresponding default values);for an operator gives the typical use. Arguments:for a function,details each of its arguments. Details:detailed description. Value:if applicable,the type of object returned by the function or the oper- ator. See Also:other help pages close or similar to the present one. Examples:some examples which can generally be executed without opening the help with the function example. 对初学者而言,参考帮助中Examples部分的信息是很有用的。而一般 应该仔细阅读Arguments中的一些说明也是非常有必要的。帮助中还包含了 其它一些说明部分,如Note,References或Author(s)等。 默认状态下,函数help只会在被载入内存中的包中搜索。选项try.all.package 在缺省值是FALSE,但如果把它设为TRUE,则可在所有包中进行搜索: 7
2.3 在线帮助 R中给予的在线帮助能提供关于如何使用函数的非常有用的信息。关于某 个特定函数的帮助能够直接被调出来,如运行: > ?lm 会立即显示关于函数lm()(线性模型)的帮助页面。命令help(lm) 和help("lm") 具有同样的效果。但在查询关于某特殊语法意义字符的帮助时必须用后一种 形式,如: > ?* Error: syntax error > help("*") Arithmetic package:base R Documentation Arithmetic Operators ... 启动帮助将会打开一个页面(取决于操作系统),第一行一般会显示某函数 或操作命令的所属的包(package),然后是标题,标题下面是则是一些详细信 息。 Description: brief description. Usage: for a function, gives the name with all its arguments and the possible options (with the corresponding default values); for an operator gives the typical use. Arguments: for a function, details each of its arguments. Details: detailed description. Value: if applicable, the type of object returned by the function or the operator. See Also: other help pages close or similar to the present one. Examples: some examples which can generally be executed without opening the help with the function example. 对初学者而言,参考帮助中Examples部分的信息是很有用的。而一般 应该仔细阅读Arguments中的一些说明也是非常有必要的。帮助中还包含了 其它一些说明部分,如Note, References或Author(s)等。 默认状态下,函数help只会在被载入内存中的包中搜索。选项try.all.package 在缺省值是FALSE, 但如果把它设为TRUE,则可在所有包中进行搜索: 7