本帖最后由 moshengren 于 2011-6-3 16:23 编辑
如果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中的函 数可用
下面的图例来形象的描述:
上图中 的参量(argument)可能 是一些 对象(如数 据,方 程,算 式. . . )。 有
些参量 在函数里被预 设为缺省值, 用户则可按需 对其作个别 的修改。所以 运
行一个R函数可能不需要设定任何参量,原因是所有的参量都可以被默认为缺
省值,当然也有可能该函数本身就不含任何参量。由于这里主要是讲述R的工
作原理,对R函数的介绍将不再展开,在后面的章节中我们会看到关于构建及
使用各种函数的详细内容。
在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的第一个元 素开始显示 。其实该 命令的功能 在
这里于 函数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
orm(1) 将产生一个服 从平均数为0标准差为1的标准正态 分布的随
机变量。当然 你也可以只 是输入函 数或表达式 而不把它的 结果赋给 某
个对象,但如果这样在窗口中展示的结果将不会被保存到内存中:
>
(10
+
2)
*
5
[1]
60
本文中,在不影响读者理解的情况下,一些赋值符号将会被省略。
函数ls的功能是显示所有在内存中的对象:只会列出对象名,如:
>
>
name
ls()
<-
"Carmen";
n1
<-
10;
n2
<-
100;
m
<-
0.5
[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"))。
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 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,则可在所有包中进行搜索:
file:///C:/Documents%20and%20Settings/Administrator/Application%20Data/Tencent/Users/50871181/QQ/WinTemp/RichOle/Q@H8JT(86@3ER)RN4_$9%7BSN.jpg
,
但注意在 这种情况下 ,不会显示 关于函数bs的 帮助页面, 如果使用者 确实想打开这样的页面而所属包又没有被载入内存时,可以使用package这个选项:
file:///C:/Documents%20and%20Settings/Administrator/Application%20Data/Tencent/Users/50871181/QQ/WinTemp/RichOle/NX__(0W08)H5QPVOM)%25S1TU.jpg
在html格式的帮助页 面中还可以使用关 键词进行搜索。在See Also部 分中 ,可 以通 过超 文本 链接 到其 他相 关 函数 的帮 助页 面。 使用 关键 词 的搜 索在R中也 可以 通过 函 数help.search来 实现 。这 种方 法能 在 所有 已安 装的 包
中 搜 索 包 含给 定 字 符 串 的 相 关 内容 。 例 如 , 运 行help.search("tree")会列 出 所 有 在 帮 助 页 面 含 有“tree”的 函 数 。 注 意 如 果 有 一 些 包 是 最 近 才 安装 的, 应该 首 先使 用 函数help.search中 的rebuild选项 来刷 新 数据 库(e.g.,help.search("tree", rebuild = TRUE))。使用函数apropos则能找出所有在名字中含有指定字符串的函数,但只会在被载入内存中的包中进行搜索:
file:///C:/Documents%20and%20Settings/Administrator/Application%20Data/Tencent/Users/50871181/QQ/WinTemp/RichOle/YVKRFQ%7B4ZVN0%7DIQF_I]1%25Q2.jpg
|