序: 这篇文档内容的来源多样,既有来自于 R官方文档(包括 R intro,R data,R admin),也有来 自于互联网的 contributed documents;还有若干来自于 Capital Of Statistics 论坛的讨论问题。 本文档的目的是为具有一定统计(数学)背景的 R 软件初学者提供一个快速认识 R 软件的平 台,如果你无此背景,可能会对其中的若干表达存在疑问。这篇文档重点不在统计方法上,因此所 列问题不可能详尽到统计学的每个知识点。 R 是一个很庞大的体系,在 CRAN 的 Task Views 上可以清楚地看到贝叶斯推断、聚类分析、 机器学习、空间统计、稳健统计等方法的介绍。而这些方法又通过相应的 R Packages 扩展,可以说 学习 R 是一件没有尽头的事情。 如果你的英文阅读没问题,那么精读一本关于 R 的原版书籍也是一个不错的选择,但这个开 头常常让人很头痛。希望这份 37 页的文档,对你认识、学习 R 是个不错的帮助。 刘思喆1 June 25, 2008 致谢: abel,cran,rtist,Xie Yihui,zhangv . . . 1sunbjt<at>gmail.com §A 前言 1. R 是做什么的? R是一个有着统计分析功能及强大作图功能的软件系统,是由奥克兰大学统计学系的 Ross Ihaka和 Robert Gentleman共同创立。由于 R受 Becker, Chambers & Wilks创立的 S和 Sussman的 Scheme 两种语言的影响,所以 R 看起来和 S 语言非常相似。 2. 在哪里可以下载 R 的安装程序 在 R 的官方网址上,选择网站镜像 http://cran.r-project.org/mirrors.html,比如 UC Berkeley下载软件副本。R拥有在 Linux,MacOS X,Windows平台下的各个版本,如果是Windows 用户,进入镜像网站,选择 Windows (95 and later) ,进入 base,下载 R-x.x.x-win32.exe。 3. 为什么 R 叫做 R 部分是因为两位 R 的作者 (Robert Gentleman 和 Ross Ihaka) 的姓名,部分是受到了贝尔实验室 S 语言的影响(称其为 S 语言的方言)。 4. CRAN 是什么意思? CRAN 是 Comprehensive R Archive N etwork 的简写,是拥有同一资料,包括 R 的发布版本,包, 文档和源代码的网络集合。 5. 我是新手,我如何开始学习 R R的官方网页拥有大量英文学习资源,还可以参考 http://cran.r-project.org/other-docs. html 上的中文翻译文档。统计之都 bbs 是一个不错的学习 R 的中文网站,这个论坛上你可以找到 大量学习资料或直接提出问题同大家探讨。 6. 初学者阅读 R 自行安装的 R-intro 就可以了么? R-intro 确实是官方文档中最基础的,但它不是从 R 软件应用角度讲的,故并不适合于 R 初学者。 可以参考 R-intro 中数据类型、结构部分,作为基础学习。 7. 能列举一些 R 的经典书目么? 正如大家应用 R 的过程中看到,大部分经典的 R 书籍都为英文: Modern Applied Statistics with S(Venables and Ripley) The New S Language: A Programming Environment for Data Analysis and Graphics —(Richard A. Becker,John M. Chambers,Allan R.Wilks) A Handbook of Statistical Analysis Using R(Brian S. Everitt,Torsten Hothorn) Data Analysis and Graphics using R(Maindonald and Braun) Introductory Statistics with R(Dalgaard) 8. R 需要编程么? 2 不!大多数时候不需要,因为 R 有很多函数和包,而且每天都在增加,你用的一般方法和函数都可 以在 R 自带包中找到。 9. 能否简单举一个 R 的例子? 生成 100 个高斯(正态)分布随机数,并对这 100 个数进行特征描述。 1 x <− rnorm (100 ,mean = 5 , sd = 0 . 1 ) mean(x ) 3 sd (x ) summary(x ) 当然你还可以使用 demo()函数,比如 R 漂亮的图形演示: demo( graph i c s ) 10. R 需要注册费用么? 不需要!R 是一款在 GNU General Public License (GPL) 下发布的开源软件,只是很少一部分包不 能用于商业用途。不知道为什么有些费时、费力且价格不菲的商业统计软件,居然还在生存? 11. 为什么 R 不能使用超过 50% 的 CPU? 这是 Windows 下任务管理器的误导,它将多个 CPU 看作是单个 CPU,同时计算使用比例。而 R 是单线程计算软件,它不能同时使用 2 个以上的 CPU。当你的计算机应用的是双核技术,你会发 现 CPU 应用会定格在 50% 上。 12. 如何在发行出版物里引用 R 如果你是 LATEX 用户,可以在 R 中使用命令 citation() 得到可供 BibTEX 使用的内容;或者是某一 个包的引用 1 c i t a t i o n ( package = ’package’) §B 基础知识 13. 如何获得帮助? R 的帮助系统非常强大,可以直接使用 “?topic” 或 help(topic)来获取 topic 的帮助信息;也可使用 help.search(”topic”) 来搜索帮助系统。 如果你只知道函数的部分名称,那么可以使用 apropos(”tab”) 来搜索得到载入内存所有包含 tab 字段的函数。 如果还没有得到需要的资料,还有 R Site Search:http://finzi.psych.upenn.edu/search. html,等价于在 R 平台上使用 RSiteSearch() 函数。 14. R 可使用的最大内存是多少? 3 R 经常因为过分消耗内存而受到指责,而事实也确是如此。不过还好,我们使用的数据量通常不是 很大,通常 R 都可以处理。特定条件下我们可能需要更大的内存来做运算,提供两种途径来设定 (增大)内存: • 启动 R 进程前,增加 R 启动参数。在 CMD 环境下,运行增加参数的 Rterm: 1 r −−max−mem−s i z e=1Gb 或通过添加 RHOME/bin 至系统环境中,直接在 “运行” 中运行2 1 r gu i −−max−mem−s i z e=1Gb • 启动 R 进程后,通过 memory.limit 函数增大 R 进程的内存限制。 R 的工作内存大小的设定值为 32Mb 到 3Gb 间的任意数值。但需要提示的是:Windows 平台可用 最大有效内存为 2Gb,也就是说,实际上 R 的工作内存区间为 32Mb 至 2Gb。 15. 为什么 help.search() 搜索不能使用? 基于浏览器的搜索引擎要求正确安装完整版 Java,且 Java 和 Javascript 须嵌入浏览器。 16. R 支持中文么? 支持,但不好!在 R 中,大部分包的作者都是以英文为母语的,不会对中文字符考虑太多,故建议 使用全英文环境。 17. R 支持自动补全(Tab completion)么? 支持!在 2.5.0 版本中,R 引入了命令自动补全功能,使用 Tab 键能自动补全 R 命令;或使用第二 次 Tab 后,返回所有可能的补全命令列表。 18. 如何清除变量? 清除单个变量使用 rm() 函数,清除内存中所有的变量: 1 rm( l i s t = l s ( a l l = TRUE) ) 19. 如何更改小数点后显示数字位数? options(digits = ) ,digits 后面的参数为 1 至 22 的数字,默认为 7。options 函数还可以改变很多全 局选项,如更改提示符 (prompt) ,是否显示错误信息 (show.error.messages) 等。 20. 如何调用系统内的程序? 使用 system() 函数或用 shell.exec() 调用相应程序来打开文件: 1 # go t o t h e c r a n system ( paste (’"C:/Program Files/Internet Explorer/iexplore.exe"’ , 2同样支持 Rterm 4 3 ’cran.r-project.org’ ) , wait = FALSE) # i n v o k e t h e n o t e p a d 5 system ("notepad") s h e l l . exec ("C:/WINDOWS/clock") 21. Windows 下升级 R ,但不想重装 packages ? 在其他目录下安装 R,再将旧版本保留的 library目录下的文件拷贝至新版本 library目录下,然后 update.packages() ;或卸载 R ,把 R 装到旧的目录下,然后 update.packages()。 22. 如何卸载已安装的 packages? 参考 remove . packages ( c ("pkg1" ,"pkg2" ) , 2 l i b = f i l e . path ("path" , "to" , "library" ) ) 23. R 的工作目录在哪里? 一般的,Windows XP 下的 R 工作目录在 C:\Documents and Se t t i n g s \username 或者使用 getwd() 命令获得 R 的工作目录 (Working Directory),使用 setwd() 设置工作目录位置。 24. 我怎样保存自己的工作? 使用 save.image() 函数。它将在 R 的起始目录保存记忆区(working space)至.RData 文件;或者使 用 save(..., file = ) 保存需要保存的 R 对象。 25. R 如何安装包? 通过选择下载镜像,R 可以自动安装未安装在本地的包,当然也可以从镜像网站下载可用的包,直 接本地安装3。 26. library() 的逆向操作是什么? 当加载包后,需要分离 R 同包时,可以使用 1 detach ("package:pkg") 27. Library 和 Package 有什么区别? 这两个概念的确容易混淆,因为 R 中加载 Package 的命令是 Library!Library 是一个目录,可能 包含一个或多个 Package;而 Package 是包含函数、数据、手册的一个集合,属于某个 Library,即 (Windows 下)的 “*.zip” 文件。 28. 如何得到加载 Package 的列表? 3R 有 Unix、Mac、Windows 三个版本,注意包也分别对应三个版本 5 search() 函数返回当前加载的包的情况,使用 1 . packages ( a l l . a v a i l a b l e = TRUE) 命令获得本地安装的包列表。 当 R 启动后,R 在内存中会自动加载若干 Package: R 初始状态载入包列表 包 描述 stats 常用统计函数 graphics 基础绘图函数 grDevices 基础或 grid 图形设备 utils R 工具函数 datasets 基础数据集 methods 用于 R 对象和编程工具的方法和类的定义 base 基础函数 29. 如何使用 R 内置的数据集? R 在 datasets 包中共提供了 100 个可以使用的数据集,这些数据集都可以通过 data() 函数加载入 内存。 1 dim( data ( ) $ r e s u l t s ) data ( ) $ r e s u l t s [ , 4 ] 30. R 的数据类型有几种? R(S 语言)没有标量,它通过使用各种类型的向量来存储数据。常用的数据类型(class)有: 常用数据类型 类型 说明 1 字符(charactor) 它们常常被引号包围 2 数字(numeric) 实数向量 3 整数(integer) 整数向量 4 逻辑(logical) 逻辑向量(TRUE=T、FALSE=F) 5 复数(complex) 复数a 6 列表(list) S 对象的向量 7 因子(factor) 常用于标记样本 a参考第 15 页 “复数计算” 在 R(S)语言中,有一点要牢记: Everything in S is an object; Every object is S has a class. 31. data frame 是什么? 6 data frame(数据框)可以理解是一个松散的数据集。它可以是由不同类型的列(数字、因子、字符 等)组成的类矩阵(matrix-like)。 32. 如何得到函数的代码? 通常情况你只需要在 R 平台下写出你需要查看的函数名,回车即可。比如: d i s t 但有时候这个函数可能是一个类函数(Generic Function),上面的方法就需要稍稍改进一下:先使 用 methods() 函数来查看这个类函数的列表,找到具体需要的函数4 ,写出来,回车 — 问题解决。 1 summary # I t i s a g e n e r i c f u n c i t o n methods ( summary) # l i s t o f t h e S 3 m e t h o d s 3 summary . lm # maybe y o u w a n t t o know t h e l i n e a r m o d e l s ’ s s umma r y 如果要究根问底,可以去下载源代码压缩包(*.tar.gz,比如 R-2.5.1.tar.gz) 33. 我想查看一个矩阵的前(后)几行,怎么办? 可以使用 head() 或 tail() 函数。 1 head (CO2) 这两个函数是类函数,它们可以应用于向量、矩阵、数据框、表格或函数。如果只想随机看看对象 中的一些内容,还可以使用 car 包中的 some 函数。 34. 在 R 中公式的符号都是什么意义? 拿常见的 lm,glm 模型来说,y ˜model 是一种特定的格式,表示以 y 为响应变量,模型为 model。 其中 model 中的变量由 + 来连接,或者由: 来表示变量间的 “交互作用”。除了 + 和 : ,我们使用 ∗ 来表示 ′a+ b+ a : b′。(a+ b+ c)∧2 表示 (a+ b+ c) ∗ (a+ b+ c),即主因素 a、b、c 和各个因素的 交互作用。− 表示去掉之意。(a+ b+ c)∧2− a : b 表示 ′a+ b+ c+ b : c+ a : c′。在公式表达中除了 变量和因子名外,运算符号也是可以存在的。如 ′ log(y) a+ log(x)′ 是合法的。 符号. 在 update 函数中有特殊的意义,它表示 “已经存在” 之意。 1 fm <− aov ( Speed ˜ Run + Expt ) fm0 <− update ( fm , . ˜ . − Run) 在第 H 节中的网格(lattice)绘图,我们还会看到 | 符号,它可以用来标示 “条件变量”。 35. R 里面可以使用科学计数法么? 可以。 1e10 == 10000000000 2 1 .2 e−4 == 0.00012 4标注星号的函数可以使用 getAnywhere() 函数获得代码 7 §C 输入输出 36. R 可以读取其他统计软件录入的数据么? 可以,使用 foreign 包,它可以读取 Minitab, S, SAS, SPSS, Stata, Systat, dBase 保存的数据 37. R 可以读 Excel 的数据么? 可以,但不推荐直接读取 Excel 文件,或许只有微软知道 Excel 里面有什么东西。通常有三种方法 读取 Excel: 1. 将 Excel 另存为 csv(Comma Separated Values) 文件,使用 read.csv() 函数读取(推荐); 2. 加载 RODBC 包,使用 odbcConnectExcel() 函数读取 xls 文件, l i b r a r y (RODBC) 2 z <− odbcConnectExcel ("rexceltest.xls") dd <− sq lFetch ( z , "Sheet1") 4 c l o s e ( z ) 详细请参考 R Data Import/Export; 3. xlsReadWrite 包中的 read.xls函数。 38. 可以将 R 中显示的结果输出到文件么? 可以。使用 sink()函数。 data (CO2) 2 s ink ("CO2.txt") CO2 4 s ink ( ) # go t o y o u r w o r k d i r e c t o r y , y o u w i l l g e t CO2 . t x t 39. 如何调用 R 的输出信息? R 提供了 capture.output() 函数,这个函数可以将 R 的输出信息转化为字符或文件。 glmout <− capture . output ( example ( glm ) ) 2 glmout [ 1 : 5 ] 当然,如果你想得到漂亮的输出,Go to LATEX! 40. R 可以从内存直接读写数据么? 可以。拷贝需要读取的内容,使用 data <− read . t ab l e ("clipboard") 2 wr i t e . t ab l e ("clipboard") 8 41. 怎样将因子 (factor) 转换为数字 这个问题时有发生,假设 f 是一个这样的因子对象,我们可以使用 as . numeric ( as . cha rac t e r ( f ) ) 2 # o r as . numeric ( l e v e l s ( f ) ) [ as . i n t e g e r ( f ) ] 42. R 可以使用电子表格输入数据么? 可以使用 edit()和 fix()函数。 1 data <− data . frame ( ) ed i t ( x ) ; f i x ( x ) 43. 为什么当我使用 source() 时,不能显示输出结果? 对需要显示输出的对象使用 print() ,或者使用 source(file,echo = TRUE)。如果 R 代码里面包含 sink() 之类的函数,必须使用 source(file,echo = TRUE) 才能得到正确的输出结果,否则 sink 的对 象将为空。 44. R 可以输出可供 TEX 使用的文本么? 可以,参考 Hmisc 包中的 latex() 函数和 xtable 包中的 xtable()函数。 a <− matrix ( 1 : 6 , nr=1) # r e q u i r e ( x t a b l e ) 2 colnames ( a ) <− paste ("col" , 1 : 6 ) x tab l e ( a ) xtable() 函数可以用于产生 HTML 格式的原码,这样 R 生成的表格就可以非常方便、漂亮地插入 到 word、powerpoint 这类文字处理软件。 输出 LATEX 格式的表格还可以 quantreg 包中的 latex.table()函数。 45. 找不到文件,但我知道它在哪! 在 R 里面使用必须使用双反斜杠或单斜杠表示文件路径,比如: 1 d :\\R−2.4.1\\ l i b r a r y \\ xgobi \\ s c r i p t s \\ xgobi . bat d : /R−2.4 .1 / l i b r a r y / xgobi / s c r i p t s / xgobi . bat 当然还可以使用 file.choose()函数打开一个 Windows标准文件选择对话框,手动选择文件。当然还 有可以使用 choose.dir() 打开 Windows 标准目录选择对话框 ,。 46. R 可以直接从数据库读取数据么? 可以,并且还可以通过 SQL语句对数据库进行操作。R对于基于 SQL语言的关系型数据库有良好 的支持,这些数据库既有商业数据库 Oracle、Microsoft SQL Server、IBM DB2 等,也包含在 GNU General Public License (GPL) 下发布的 MySQL 等开源数据库。 9 RMySQL 5 包中提供了到 MySQL 数据库的接口;RODBC 包提供了更为广泛数据库接口的解 决方案 — 支持所有标准 ODBC 接口的数据库。通过这种方式,相同的 R 代码可以方便地应用于 不同类型的数据库。 l i b r a r y (RODBC) 2 ch <− odbcConnect ("stocksDSN" , uid = "myuser" ,pwd = "mypassword") s t o ck s <− sqlQuery ( ch ,"select ∗ from quotes") 4 odbcClose ( ch ) 经测试,Windows 平台上的 Microsoft SQL Server、Access、Oracle、MySQL、PostgreSQL,和 Linux 平台上的 MySQL、Oracle、PostgreSQL、SQLite 都有良好的应用案例(详细参考 R-data)。 §D 数据处理 47. 如何删掉缺失值? 在 R 中使用 NA(not available)表示缺失值,要注意 R(S)语言中 NA 同样是一个逻辑值,6 x <− NA 2 x > 3 c l a s s ( x ) 故当判断是否相等时不能使用 1 x == NA 来判断缺失值。而是使用函数 is.na()来判断是否为缺失值,使用 1 x [ ! i s . na (x ) ] 删除缺失值。 48. 如何将字符串转变为命令执行? 这里用到 eval() 和 parse() 函数。首先使用 parse() 函数将字符串转化为表达式(expression),而后 使用 eval() 函数对表达式求解。 1 x <− 1 :10 a <− "print(x)" 3 c l a s s ( a ) eva l ( parse ( t ex t = a ) ) 49. 如何向一个向量追加元素? 参考 append()函数。 5需要包 DBI 的支持 6R 共有三个逻辑值 TRUE、FALSE、NA 10 x <− 1 :5 2 ( foo <− c (x [ 1 ] , 0 , x [ 2 : 5 ] ) ) # e x p e c t e d r e s u l t append (x , 0 , a f t e r = 1) 50. 如何移除某行 (列) 数据 可以使用函数 subset(select = ) ;或者使用下标: 1 x <− data . frame ( matrix ( 1 : 3 0 , nrow = 5 , byrow = T) ) dim(x ) 3 pr in t ( x ) new . x1 <− x[−c ( 1 , 4 ) , ] #row 5 new . x2 <− x[ ,− c [ 2 , 3 ] ] # c o l new . x1 ; new . x2 事实上,关于选取特定条件下的数据框数据,subset 函数同使用下标效果相同: iS <− i r i s $ Spec i e s == "setosa" 2 i r i s [ iS , c ( 1 , 3 ) ] subset ( i r i s , s e l e c t = c ( Sepal . Length , Peta l . Length ) , Spec i e s == "setosa") 51. 如何比较两个数据框是否相同? 比较每个元素是否相同,如果每个元素都相同,那么这两个数据框也相同 1 a1 <− data . frame (num = 1 :8 , l i b = l e t t e r s [ 1 : 8 ] ) a2 <− a1 3 a2 [ [ 3 , 1 ] ] <− 2 −> a2 [ [ 8 , 2 ] ] any ( a1 !=a2 ) # a l l ( a 1 == a 2 ) any() 函数可以返回是值是否至少有一个为真的逻辑值。而数据框中的元素有不相等的情况,则 a1 !=a2 将返回至少一个 TRUE,那么 any() 函数将判断为 TRUE。同样也可以使用 identical() 函数。 1 i n d e n t i c a l ( a1 , a2 ) 如果需要返回两个数据框不相同的位置,可以使用 1 which ( a1 !=a2 , a r r . ind = TRUE) arr.ind 参量是 array indices 之意,返回数据框的行列位置。 52. 我的数据框有相同的行,如何去掉这些行? 参考 unique 函数。unique 函数可以去掉向量、数据框或类似数列的数据中重复的元素。 11 1 x <− c ( 9 : 2 0 , 1 : 5 , 3 : 7 , 0 : 8 ) ( xu <− x [ ! dup l i ca t ed (x ) ] ) 3 unique (x ) # i s mo r e e f f i c i e n t 这里 duplicated 函数返回了元素是否重复的逻辑值。 53. 如何对数列(array)进行维度变换? 使用函数 aperm 1 x <− array ( 1 : 2 4 , 2 : 4 ) xt <− aperm(x , c ( 2 , 1 , 3 ) ) 3 dim(x ) ; dim( xt ) 54. 如何删除 list 中的元素? R 中使用 NULL 表示无效的对象。 1 l s t <− l i s t ("a"=l i s t ("b"=1,"c"=2) ,"b"=l i s t ("d"=3,"e"=4)) l s t [ [ "a" ] ] [ "b" ] <− NULL # o r l s t $ a $b <− NULL 3 l s t 55. 如何对矩阵按行 (列) 作计算? 使用函数 apply() 1 vec=1:20 mat=matrix ( vec , nco l=4) 3 vec cumsum( vec ) 5 mat apply (mat , 2 , cumsum) 7 apply (mat , 1 , cumsum) 56. 如何注掉大段的 R 脚本 如果你使用支持正则表达式的文本编辑器的话,可以考虑用正则表达式 (Regular Expression) ;或 者将大段的代码写入一个 *.R 文件,如果需要注掉的话,在 source(*.R) 前加入 # 即可;还可以使 用 1 i f (FALSE){ something passby 3 } 57. 如何对数据框 (data frame) 的某列作数学变换? 使用 transform() 函数对其操作,具体参考?transform 12 58. 如何求解两组平行向量的极值? pmax() 和 pmin() ,如: 1 x <− 1 :10 ; y <− rev (x ) pmax(x , y ) ; pmin (x , y ) 59. 如何对不规则数组进行统计分析? 参考 tapply() : n <− 17 ; f a c <− f a c t o r ( rep ( 1 : 3 , l en = n ) , l e v e l s = 1 : 5 ) 2 t ab l e ( f a c ) tapply ( 1 : n , fac , sum) 4 tapply ( 1 : n , fac , mean) ## o r r e v e r s e a l i s t 6 to <− l i s t ( a = 1 , b = 1 , c = 2 , d = 1) tapply ( to , u n l i s t ( to ) , names ) tapply() 的常见于方差分析中对各个组别进行 mean、var(sd)的计算。说到概要统计,不得不说另 外一个函数 aggregate(),它将 tapply() 函数对象为向量的限制扩展到了数据框。7 1 attach ( warpbreaks ) tapply ( breaks , l i s t ( wool , t en s i on ) ,mean) 3 aggregate ( breaks , l i s t ( wool , t en s i on ) ,mean) ## f r om t h e h e l p 5 aggregate ( s t a t e . x77 , l i s t ( Region = s t a t e . reg ion , 7 Cold = s t a t e . x77 [ ,"Frost" ] > 130) , mean) 60. 判断数据框的列是否为数字? sapply(dataframe, is.numeric) 61. 一组数中随机抽取数据? 函数 sample() sample(n) 随机组合 1, . . . , n sample(x) 随机组合向量 x, length(x) > 1 sample(x, replace = T) 解靴带法 sample(x,n) 非放回的从 x 中抽取 n 项 sample(x,n, replace = T) 放回的从 x 中抽取 n 项 sample(x,n, replace = T ,prob = p) 以概率 p,放回的从 x 中抽取 n 项 7当然同样概要统计的表现形式不一样 13 n <− 1000 2 x <− sample ( c (−1 ,1) , n , r ep l a c e=T) p lo t (cumsum(x ) , type="l" , 4 main="Cumulated sums of Bernoulli variables") 还可以参考第 17 页中关于模拟已知分布的随机数据函数,如: rnorm (100 , mean=0, sd=1) 62. 如何根据共有的列将两个数据框合并? 我们经常会遇到两个数据框拥有相同的时间或观测值,但这些列却不尽相同。处理的办法就是使用 merge(x, y ,by.x = ,by.y = ,all = ) 函数。 63. 如何将数据标准化? 参考 scale 函数。 1 x <− c ( rnorm (100) , 2∗rnorm (30 ) ) m <− s c a l e ( x , s c a l e = F) # o n l y c e n t e r i n g 3 n <− s c a l e ( x , c en t e r = F) # o n l y s c a l i n g 64. 为什么 fivenum 和 summary 两个函数返回的结果不同? 因为他们对数据描述机理一致,所以有些教材将二者等同,但他们确实有细微差别。 1 > fivenum ( c (1 , 4 , 6 , 17 , 50 , 51 , 70 , 100 ) ) [ 1 ] 1 . 0 5 . 0 33 .5 60 .5 100 .0 3 > quan t i l e ( c (1 , 4 , 6 , 17 , 50 , 51 , 70 , 100 ) ) 0% 25% 50% 75% 100% 5 1 .00 5 .50 33 .50 55 .75 100 .00 我们看下他们的的定义:分位数是指有百分之多少的数据小于的数值(summary() 函数,即使用分 位数概念),我们可以看到 14 , 34 分位数的定义: 1 + 1 4 (length(x)− 1),1 4 分位数 1 + 3 4 (length(x)− 1),3 4 分位数 而 fivenum() 函数是完全利用中位数概念。 §E 数学运算 65. 如何做出曲线积分? R 语言使用 integrate 函数来得到积分结果,如 14 1 i n t e g r a t e (dnorm , −1.96 , 1 . 96 ) i n t e g r a t e (dnorm , −In f , I n f ) 3 ## a s l o w l y − c o n v e r g e n t i n t e g r a l in tegrand <− f unc t i on (x ) {1/ ( ( x+1)∗ s q r t ( x ) )} 5 i n t e g r a t e ( integrand , lower = 0 , upper = In f ) 66. 如何得到一个列向量? 矩阵转置可以使用函数 t() ,R 中默认 x 为 “integer” 类型数据,这时可以用 t(t(x)) 得到列向量: 1 x <− 1 :10 ; c l a s s ( x ) t ( x ) ; c l a s s ( t ( x ) ) 3 t ( t ( x ) ) ; c l a s s ( t ( t ( x ) ) ) 行向量、列向量常常会有一个比较容易让人迷糊的地方: 1 x%∗%x 计算的是 xTx(计算 xxT 使用 %o% 或 outer() 函数)。crossprod() 函数能避免这种情况: 1 XT. y <− c ros sprod (X, y ) 它直接计算 XTY,可以看作前者的另一种表达方式,当然 crossprod() 更为有效8。由于 outer() 函 数的矩阵意义,它常用于三维绘图数据,比如我们计算 10× sin √ x2 + y2√ x2 + y2 那么对应的 R 函数计算为: 1 f <− f unc t i on (x , y ) { r <− s q r t ( xˆ2+y ˆ2 ) ; 10 ∗ s i n ( r ) / r } z <− outer (x , y , f ) 67. R 如何进行复数计算? 参考 complex() 函数的帮助。 x <− 1 + 1 i # x <− c o m p l e x ( 1 , 1 ) 2 Mod(x ) ; Conj ( x ) 68. 如何生成对角矩阵? 对一个向量使用 diag() 函数,得到对角线元素为向量的对角矩阵;对整数 Z 使用此函数得到 Z 维 的单位矩阵。 69. 求矩阵的特征值和特征向量的函数是什么? 参考:eigen 函数 8当矩阵很大时,会非常明显 , 15 70. 如何构造上(下)三角矩阵? 参考函数 lower.tri() 和 upper.tri() 。 Rmat <− matrix ( 1 : 1 6 , 4 , 4 ) 2 Rmat [ lower . t r i (Rmat ) ] <− 0 Rmat 71. 求立方根如何运算? xˆ(1/3)。在 R 里面 sqrt() 函数可以计算开平方,故新手容易推测开立方也有函数。事实上 R 里面 使用 ˆ 来作幂函数运算。ˆ 不但是运算符号,还可以看作是函数: 1 "ˆ"( x , 1/ 3) 在 R 中的运算符号包括: R 中的运算符号 数学运算 +,-,*,/,ˆ,%%,%/% 加、减、乘、除、乘方、余数、整除 逻辑运算 >,<,>=, <=,==, ! = 大于,小于,大于等于,小于等于,等于,不等于 72. 如何求矩阵各行 (列) 的均值? 如果运算量不是很大,当然可以使用 apply()函数。rowMeans()和 colMeans()函数可以更快地得到 你要的结果。 1 m <− 1000 ; n <− 3000 A <− matrix ( 1 :m∗n ,m ,n) 3 system . time (B1 <− matrix ( apply (A, 2 ,mean ) , m, n , by=T) ) system . time (B2 <− matrix ( colMeans (A) , m, n , by=T) ) 73. 如何计算组合数或得到所有组合? choose()用于计算组合数 (nk),函数 combn()可以得到所有元素的组合。使用 factorial()计算阶乘。 74. 如何在 R 里面求(偏)导数? 使用函数 D() f1 <− exp r e s s i on ( s i n (x ) ∗x ) 2 f 2 <− exp r e s s i on (xˆ2∗y + yˆ2) D( f ,"x") 75. 如何求一元方程的根? 使用 uniroot()函数,不过 uniroot 是基于二分法来计算方程根,当初始区间不能满足要求时,会返 回错误信息。 1 f <−f unc t i on (x )xˆ3 − 2∗x − 1 un i root ( f , c ( 0 , 2 ) ) 16 如果一元方程的根恰恰是其极值,那么还可以使用 optimize()函数来求极值。 f <− f unc t i on (x )xˆ2 + 2∗x + 1 2 opt imize ( f , c (−2 ,2)) 76. 如何模拟高斯(正态)分布数据? 使用 rnorm(n , mean , sd) 来产生 n 个来自于均值为 mean,标准差为 sd 的高斯(正态)分布的数 据。在 R里面通过分布前增加字母 ‘d’表示概率密度函数,‘p’表示累积分布函数,‘q’表示分位 数函数,‘r’ 表示产生该分布的随机数。这些分布具体可以参考第 20 页中 “如何做密度曲线”,或 R-intro 中的 Probability distributions 章节,或 help . search ("distribution") 使用这些函数可以很轻松的进行相关的分布的概 率计算,如已知 X˜N(3, 1),计算 P (2 6 X 6 5) 利用正态分布的累积分布函数 pnorm 1 pnorm (5 , 3 , 1 ) − pnorm (2 , 3 , 1 ) 计算结果为 0.8185946,即右图中阴影的面积。 −2 0 2 4 6 8 0. 0 0. 1 0. 2 0. 3 0. 4 D en si ty P(2<x<5) §F 字符操作 77. R 对大小写敏感么? R 中有很多基于 Unix 的包,故 R 对大小写是敏感的。可以使用 tolower() 、toupper() 、casefold() 这类的函数对字符进行转化。 1 x <− "MiXeD cAsE 123" char t r ("iXs" , "why" , x ) 3 char t r ("a-cX" , "D-Fw" , x ) to lower (x ) 5 toupper ( x ) 78. R 运行结果输出到文件中时,文件名中可以用变量代替吗? 可以,通过使用 paste() 函数。 17 1 f o r ( var in l e t t e r s [ 1 : 6 ] ) { x <− var 3 wr i t e . t ab l e ( x , paste ("FOO " , var , ".txt" , sep = "" ) ) } # You w i l l g e t ”FOO a . t x t ” . . . 79. 在 R 中如何使用正则表达式(Regular Expressions ) 在 R中,有三种类型的正则表达式:extended regular expressions,使用函数 grep(extended = TRUE) (默认);basic regular expressions,使用 grep(extended = FALSE);Perl-like regular expressions,使 用 grep(perl = TRUE)。比如 “.” 用来匹配任意字符(使用 “\.” 来匹配 “.”): grep ("J." , month . abb ) 详细可以参考 help(”regex”)。 80. 如何在字符串中选取特定位置的字符? 参考 substr()函数。 1 subs t r ("abcdef" , 2 , 4 ) sub s t r i ng ("abcdef" , 1 : 6 , 1 : 6 ) 这个函数同时支持中文,用她来处理 “简称” 和 “全称” 还是一个不错的选择的。 81. 如何返回字符个数? 参考 nchar 。 nchar (month . name [ 9 ] ) §G 日期时间 82. 日期可以做算术运算么? 可以。一般我们需要使用 as.Date() ,as.POSIXct() 函数将读取的日期(字符串)转化为 “Date” 类 型数据,“Date” 类型数据可以进行算术运算。 1 d1 <− c ("06/29/07") ; d2 <− c ("07/02/07") D1 <− as . Date (d1 ,"%m/%d/%y") 3 D2 <− as . Date (d2 ,"%m/%d/%y") D1 + 2 ; D1 − D2 5 d i f f t im e (D1 ,D2 , un i t s = "days") 83. 如何将日期表示为 “星期日, 22 七月 2007” 这种格式? 使用 format() 函数。 18 1 format ( ( Sys . Date ( ) , format="%A, %d %B %Y") 具体 format 参数可以参考 help(strptime) 的 details 部分。 §H 绘图相关 84. 如何在同一画面画出多张图? 这里提供三种解决方案: • 修改绘图参数,如 par(mfrow = c(2,2)) 或 par(mfcol = c(2,2)); • 更为强大功能的 layout函数,它可以设置图形绘制顺序和图形大小; • split.screen()函数。 推荐使用 layout() 函数,Statistics with R 的一个例子: 1 l ayout ( matrix ( c (1 , 1 , 1 , 2 , 3 , 4 , 3 2 , 3 , 4 ) , nr = 3 , byrow = T)) h i s t ( rnorm (25 ) , c o l = "VioletRed") 5 h i s t ( rnorm (25 ) , c o l = "VioletRed") h i s t ( rnorm (25 ) , c o l = "VioletRed") 7 h i s t ( rnorm (25 ) , c o l = "VioletRed") 85. 如何设置图形边缘大小 修改绘图参数 par(mar = c(bottom, left, top, right)),bottom, left, top, right 四个参数分别是距 离 bottom, left, top, right 的长度,默认距离是 c(5, 4, 4, 2) + 0.1。或者修改绘图参数 par(mai = c(bottom, left, top, right)),以英寸为单位来指定边缘大小。 86. 常用的 pch 符号都有哪些? pch 是 plotting character 的缩写。pch 符号 可以使用 “0 : 25” 来表示 26 个标识(参 看右图 “pch 符号”)。当然符号也可以使用 #,%, ∗, |,+,−, ., o, O。值得注意的是,21 : 25 这几个符号可以在 points函数使用不同的颜 色填充(bg= 参数)。 0 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 1 op <− par ( bg = "light blue") x <− seq (0 ,2 ∗pi , l en=51) 3 p lo t (x , s i n (x ) , type = "o" , bg=par ("bg" ) ) po in t s (x , s i n (x ) , pch = 21 , cex =1.5 , bg="red") 19 87. 如何在已有图形上加一条水平线 使用低水平绘图命令 abline(),它可以作出水平线(y值 h=)、垂线(x值 v=)和斜线(截距 a=,斜 率 b=)。 R中的绘图命令可以分为 “高水平”(High level)、“低水平(Low level)”和 “交互式”(Interactive) 三种绘图命令。 简要地说,“高水平” 绘图命令可以在图形设备上绘制新图;“低水平” 绘图命令将在已经存在 图形上添加更多的绘图信息,如点、线、多边形等;使用 “交互式” 绘图命令创建的绘图,可以使用 如鼠标这类的定点装置来添加或提取绘图信息。在已有图形上添加信息当然要使用 “低水平” 绘图 命令。 88. 如何做密度曲线? 常用的办法是:做出 x 的一个序列,然后做出dfunction(x),比如: x=seq (−3 , 3 , . 0 5 ) 2 p lo t (x , dnorm(x ) , type="l") l i n e s (x , dt (x , 1 ) , c o l = "red") dfunction(x) 中的 function 是指分布族,可以参考 R-intro 中的 Probability distributions 章节,或 help.search(”distribution”)。关于构造相关分布函数参考第 17 页中 “如何模拟高斯分布数据”。 R 中的分布函数 分布 R 函数 附加参数 默认参数 beta beta shape1(α),shape2(β) 二项 binom size(n),prob(p) χ2 chisq df 均匀 unif min(a),max(b) min = 0,max = 1 指数 exp rate rate = 1 F f df1(r1),df2(r2) 伽玛 gamma shape(α),scale(θ) scale = 1 超几何 hyper m = N1, n = N2, k = n 正态 norm mean(µ),sd(σ) mean = 0, sd = 1 泊松 pois lamda(λ) t t df 威布尔 weibull shape(α),scale(θ) scale = 1 89. 如何加图例? 绘制图形后,使用 legend函数,help(”legend”) 1 with ( i r i s , p l o t ( Sepal . Length , Sepal .Width , pch=as . numeric ( Spec i e s ) , cex =1.2)) 20 3 l egend ( 6 . 1 , 4 . 4 , c ("setosa" , "versicolor" , "virginica" ) , cex =1.5 , pch=1:3) 90. 怎么做饼图? 参考 pie()函数。饼图展示数据的能力较差,因为我们的眼睛对长度单位比较敏感,而对关联区域和 角度感觉较差。建议使用条形图(bar chart)和点图(dot chart)。 91. 如何做茎叶图? 参考 stem 函数。 stem ( f a i t h f u l $ e rupt i ons ) 92. R 如何做双坐标图? 在 R 中可以通过绘图参数 par(new = TRUE)使得绘制第二个绘图 (hight-level plot) 时保留第一个 绘图区域,这样两张绘图会重叠在一起,看起来就是双坐标图。下面的例子是在同一张图上绘制 GDP 和失业率 (UR): 1 year <− 1995:2005 x1 <− data . frame ( year , GDP = so r t ( rnorm (11 ,1000 ,100 ) ) ) 3 x2 <− data . frame ( year , UR = rnorm (11 , 5 , 1 ) ) par (mar = c (5 ,4 , 4 , 6 )+0 .1 ) 5 p lo t ( x1 , axes = FALSE, type="l") ax i s (1 , at = year , l a b e l = year ) ; ax i s (2 ) 7 par (new = T, mar = c (10 , 4 , 10 , 6 ) + 0 . 1 ) p l o t ( x2 , axes = FALSE, xlab = "" , y lab = "" , c o l = "red" , type= "b") 9 mtext ("UR(%)" , 4 , 3 , c o l="red") ax i s (4 , c o l ="red" , c o l . ax i s = "red") 但不推荐使用双坐标图来进行数据描述,这样很容易造成误解。并且在 R 中做出并排图形作对比 很容易,没有必要绘制双坐标图。 93. 如何为绘图加入网格? 使用 grid() 函数, p lo t ( 1 : 3 ) 2 g r id (NA, 5 , lwd = 2) # g r i d o n l y i n y− d i r e c t i o n 94. 如果绘图时标题太长,如何换行? 可以使用 strwrap 函数,这个函数可以将定义段落格式。 p lo t (0 ,main = paste ( strwrap ("This is a really long title that 2 i can not type it properly" , width = 50 ) , 21 c o l l a p s e = "\n" ) ) 95. 可以打开多个图形设备么? 可以。当打开多个图形设备后,使用 dev.list()察看图形设备的数目(除了设备一),使用 dev.cur()察 看当前使用的图形设备,dev.set()改变激活指定的图形设备,dev.off()关闭图形设备。 96. 坐标 y 上的数字如何水平放置? 仍然是绘图参数问题: 1 ?par # s e e l a s p lo t (0 , 0 , xaxt="n" , type="n" , yl im=c (0 , 100 ) , l a s=1 ) 3 mtext ("35" , s i d e =2, at=35, l i n e =1, l a s =1) 97. 常用的绘图设备都有哪些? R 支持的图形设备有如下几种(参考?Devices): R 图形设备 名称 描述 屏幕 x11 X 窗口 显示 windows Windows 窗口 postscript ps 格式文件 pdf pdf 格式文件 pictex 供 LATEX使用的文件 文件 png png 格式文件 设备 jpeg jpeg 格式文件 bmp bmp 格式文件 xfig 供 XFIG 使用的图形格式 win.metafile a emf 格式的文件 a仅在 Windows 下有效 这里推荐使用 postscript() 函数,因为 ps 图形格式为矢量绘图格式,且通用性较强。 98. 如何做雷达图? R 里面使用 stars 函数来做雷达图。 1 s t a r s ( s t a t e . x77 [ , c (7 , 4 , 6 , 2 , 5 , 3 ) ] , f u l l = FALSE, key . l o c = c (10 , 2 ) ) 这里的的 full = FALSE 参数表示只绘制雷达图的上半部分(反之,绘制整个雷达图);key.loc 参数 表示基准图例的位置。 99. 为什么 R 不能显示 8 种以上的颜色? 当绘图参数 col使用数字来代替颜色名时会有这种情形,这是因为 R内置调色板默认为 8种颜色: 22 pa l e t t e ( ) 2 barp lo t ( rnorm (15 , 10 , 3) , c o l = 1 : 15 ) p a l e t t e ( rainbow (15 ) ) 4 barp lo t ( rnorm (15 , 10 , 3) , c o l = 1 : 15 ) p a l e t t e ("default") 在 R 中共有 657 种颜色名称可以使用,它们的名称可以通过 1 c o l o r s ( ) 来得到,但事实上有些颜色名称代表的颜色重复,R 中颜色名称只能显示 502 种颜色。当然可以使 用函数 rgb() 来指定任意色彩。 100. 如何用不同的颜色来代表数据? 高级绘图函数一般都有 col 参数可以设置。对于像 barplot() 这类图形,可以使用 “颜色组”(color sets) 来设置颜色,颜色组包括如下几类: R 颜色组函数 名称 描述 rainbow() 彩虹色 ( ) heat.colors() 红色至黄色 ( ) terrain.colors() 绿色、棕色至白色 ( ) topo.colors() 深蓝色至浅棕色 ( ) cm.colors() 浅蓝到白色,浅紫色 ( ) gay()、grey() 灰色 ( ) 1 x <− 1 :10 ; names (x ) <− l e t t e r s [ 1 : 1 0 ] barp lo t (x , c o l = rev ( heat . c o l o r s ( 1 0 ) ) ) 3 barp lo t (x , c o l = gray ( ( 1 : 1 0 ) / 1 0 ) ) ; 101. 怎样将 R 的颜色同 RGB 对应起来? 参考函数 col2rgb() 1 wr i t e . t ab l e ( t ( co l2 rgb ( rainbow (7 ) ) / 255) , sep = ",") 102. 如何调整所绘图形的大小? Windows 平台下,正常情况打开绘图窗口,调整窗口大小,点击菜单直接保存,或使用 savePlot() 函数保存;当然也可以事先用 1 windows ( width = , he ight = ) 打开一个定义好大小的窗口,然后绘图;还可以使用 pdf() ,postscript() , png() ,jpeg() ,pictex() 等 “后台生成” 函数, 23 1 ## s t a r t a PDF f i l e pdf ("picture.pdf" , he ight=4,width=6) 3 ## y o u r d r a w i n g c ommand s h e r e dev . o f f ( ) ### c l o s e t h e PDF f i l e 这些函数都有设置图形大小的参数;还可以使用 dev . copy ( device , f i l e="" , he ight , width ) 命令。 103. 如何模拟布朗运动? 布朗运动可以用标准正态的随机模拟值的累积和来模拟: 1 # two d i m e n s i o n s n <− 100 3 x <− cumsum( rnorm (n ) ) y <− cumsum( rnorm (n ) ) 5 p lo t (x , y , type = ’l’) 104. 如何获得连接若干点的平滑曲线? 如果已知做出这些点的函数可以使用 curve(expr, from , to, add = T) 函数。反之,使用立方曲线差 值函数 spline(x , y , n= ) ,如: 1 x <− 1 :5 y <− c (1 , 3 , 4 , 2 . 5 , 2 ) 3 p lo t (x , y ) sp <− s p l i n e (x , y , n = 50) 5 l i n e s ( sp ) 105. 网格 (lattice) 绘图和普通绘图有什么区别? 网格(lattice)绘图实际上是 S-plus中 Trellis绘图在 R中的实现,是多元数据可视化的方法。网格 绘图相对于普通绘图来说,是一种拥有 “固定格式” 的绘图方式,当然它相对来说较难修改。如果 数据分属不同的类别,需要将这些类别下的数据进行比较,网格绘图是很不错的选择: 1 l i b r a r y ( l a t t i c e ) histogram ( ˜ he ight | vo i c e . part , data = s i n g e r ) 常用的 lattice 绘图函数有: 24 常用 lattice 绘图函数 函数 说明 xyplot(y˜x) 双变量散点图 dotplot(y˜x) Cleveland 点图 (逐行逐列累加图) barchart(y˜x) y 对 x 的条形图 stripplot(y˜x) 一维图,x 必须是数值型,y 可以是因子 bwplot(y˜x) 箱线图 histogram(˜x) 直方图 106. 如何绘制三维图? 参考 persp() ,contour() 函数。这里需要注意的三维绘图中第三维坐标的形式。参考第 15 页中的 outer() 函数。 107. 想把一个数值的矩阵映射为一个颜色方格的矩阵,什么函数? 参考 image() 和 filled.contour() 函数: x <− y <− seq (−10 , 10 , l ength=50) 2 f <− f unc t i on (x , y ){ r <− s q r t ( xˆ2 + yˆ2) 4 10∗ s i n ( r ) / r } 6 z <− outer ( x , y , f ) image (x , y , z ) 8 f i l l e d . contour (x , y , z ) 108. 散点图中散点大小同因变量值成比例如何画? 在 R 中做这类图很简单,因为 R 的很多绘图参数可以使用变量: x <− 1 :10 2 y <− r un i f (10) symbols (x , y , c i r c l e s = y/2 , inche s = F, bg = x) 109. 我想为一个数据框的每一列都做 Q–Q 图? 使用 apply() 函数作用于矩阵的行或列,且能避免 R 中的显式循环 1 t ab l e <− data . frame ( x1 = rnorm (100) , x2 = rnorm (100 , 1 , 1 ) ) par ( ask=TRUE) # w a i t f o r c h a n g i n g 3 r e s u l t s = apply ( tab le , 2 , qqnorm) par ( ask=FALSE) 110. 如何在一个直方图上添加一个小的箱线图? 25 在直方图的空白位置添加另外的小图(像图例一样),仍然使用参数 par(): x <− rnorm (100) 2 h i s t ( x ) op <− par ( f i g=c ( . 0 2 , . 5 , . 5 , . 9 8 ) , new=TRUE) 4 boxplot ( x ) 111. 如何在 R 的绘图中加入数学公式或希腊字符? 参考?plotmath ,熟悉 LATEX 的用户,会发现二者语法非常类似。 x <− 1 :10 ; p l o t (x , type = "n") 2 t ex t (3 , 2 , exp r e s s i on ( paste ("Temperature (" , degree , "C) in 2003" ) ) ) t ex t (4 , 4 , exp r e s s i on ( bar ( x ) == sum( f r a c (x [ i ] , n ) , i ==1, n ) ) ) 4 t ex t (6 , 6 , exp r e s s i on ( hat ( beta ) == (Xˆ t ∗ X)ˆ{ . 1} ∗ Xˆ t ∗ y ) ) t ex t (8 , 8 , exp r e s s i on ( z [ i ] == sq r t ( x [ i ] ˆ2 + y [ i ] ˆ 2 ) ) ) 112. 如何在条形图上显示每个 bar 的数值? 如果明白 barplot()函数其实是由低级绘图命令 rect()函数构造的,那下面的例子也就不难理解了: 1 x <− 1 :10 ; names (x ) <− l e t t e r s [ 1 : 1 0 ] b <− barp lo t (x , c o l = rev ( heat . c o l o r s ( 1 0 ) ) ) 3 t ex t (b , x , l a b e l s = x , pos = 3) 113. 如何绘制椭圆或双曲线? 根据函数式的基本绘图。直角坐标系下可使用参数方程: ( x a )2 + ( y b )2 = 1 =⇒ x = a sin θ, y = b cos θ, 0 < θ < 2pi 1 t <− seq (0 ,2 ∗pi , l ength = 100) x <− s i n ( t ) # a=1 3 y <− 2∗ cos ( t ) # b=2 p lo t (x , y , type = ’l’) 114. 在 word 里如何使用 R 生成的高质量绘图? 矢量绘图的效果是最好的,比如 eps、pdf,而不是位图(png、jpg、tiff 等)。在 word 里面,可以使 用 eps,虽然在屏幕上显示不是很好,但打印效果却不错。 §I 统计模型 115. 有没有直接计算峰度和偏度的函数? 26 当然自己写一个也费不了太多时间。FBasics 包中提供了 skewness ( ) 2 ku r t o s i s ( ) 可以直接计算偏度和峰度。 116. 如何做交叉列联表? table() 函数。table(x) 为 x 的频数表;table(x,y) 为交叉列联表。 x <− with ( a i r qua l i t y , t ab l e ( cut (Temp, quan t i l e (Temp) ) , Month ) ) 2 prop . t ab l e (x , 1 ) 117. 如何做线性回归模型? 线性模型是最核心的经典统计方法,且至今仍然有广泛应用;很多现代统计方法都是在此基础上发 展起来的。最简单的线性回归模型为: yi = α+ βxi + ²i 其中 α 为截距项,β 为模型的斜率,² 为误差项。 lm() 函数提供了线性回归的计算方法。 lm . sw i s s <− lm( F e r t i l i t y ˜ . , data = sw i s s ) lm() 的结果是一个包含回归信息的列表,它包含以下信息: coefficients:回归系数(矩阵) residuals:返回模型残差(矩阵) fitted.values:模型拟合值 . . .:. . . 可以使用如下命令得到列表名称: 1 names ( lm . sw i s s ) summary() 和 anova() 分别返回回归模型的概要信息和方差分析表。 1 summary( lm . sw i s s ) # t h e s am e a s s umma r y . lm ( ) anova ( lm . sw i s s ) 提取模型信息的类函数有很多,其他可以参考 R-intro 中 Statistical models in R 一节。 如果处理数据的量很大,可以使用 biglm 包中的 biglm() 函数。这个函数可以用于 “海量” 数 据的回归模拟。 118. 如何更新模型? 参考 update() 函数: 27 summary( f0 <− lm( F e r t i l i t y ˜ . , data = sw i s s ) ) 2 f 1 <− update ( f0 , . ˜ . − Examination ) summary( f1 ) 119. 如何使用逐步回归? 在 R里,可以使用计算逐步回归的 step()函数。它以计算 AIC信息统计量为准则,选取最小的 AIC 信息统计量来达到逐步回归的目的。 1 u t i l s : : example ( lm) step ( lm .D9) step 函数可使用 “both,forward,backward” 三种方法,其默认为 “backward”。当然你还可以参考 add1,drop1 函数。 120. R 中如何实现分位数回归 (Quantile Regression) 参考 quantreg 和 quantregForest 包 data ( enge l ) 2 taus <− c ( . 1 5 , . 2 5 , . 5 0 , . 7 5 , . 9 5 , . 9 9 ) rqs <− as . l i s t ( taus ) 4 f o r ( i in seq ( along = taus ) ) { rqs [ [ i ] ] <− rq ( log10 ( foodexp ) ˜ log10 ( income ) , 6 tau = taus [ i ] , data = enge l ) l i n e s ( log10 ( enge l $ income ) , f i t t e d ( rqs [ [ i ] ] ) , c o l = i +1) } 8 l egend ("bottomright" , paste ("tau = " , taus ) , i n s e t = . 04 , c o l = 2 : ( l ength ( taus )+1) , l t y =1) 121. 如何得到一个正态总体均值 µ 的区间估计? 很简单,t.test() 函数 1 x <− rnorm (100) t . t e s t ( x ) 122. 如何做聚类分析? K 均值聚类 (kmeans() ): x <− rbind ( matrix ( rnorm (100 , sd = 0 . 3 ) , nco l = 2) , 2 matrix ( rnorm (100 , mean = 1 , sd = 0 . 3 ) , nco l = 2) ) c l <− kmeans (x , 2 , 20) 4 p lo t (x , c o l = c l $ c l u s t e r , pch=3, lwd=1) po in t s ( c l $ cente r s , c o l = 1 : 2 , pch = 7 , lwd=3) 6 segments ( x [ c l $ c l u s t e r ==1 , ] [ , 1 ] , x [ c l $ c l u s t e r ==1 , ] [ , 2 ] , 28 c l $ c en t e r s [ 1 , 1 ] , c l $ c en t e r s [ 1 , 2 ] ) 8 segments ( x [ c l $ c l u s t e r ==2 , ] [ , 1 ] , x [ c l $ c l u s t e r ==2 , ] [ , 2 ] , c l $ c en t e r s [ 2 , 1 ] , c l $ c en t e r s [ 2 , 2 ] , 10 c o l =2) 层次聚类 (hclust() ): n <− seq (1 ,50 , by = 4) 2 ( x <− USArrests [ n , ] ) # p r i n t ( ) hc1 <− hc lu s t ( d i s t ( x ) , method = "complete") 4 hc2 <− hc lu s t ( d i s t ( s c a l e ( x ) ) , method = "complete") hc3 <− hc lu s t ( d i s t ( x ) , method = "ave") 6 l ayout ( matrix ( c ( 1 , 1 , 2 , 3 ) , nrow = 2 , byrow = T) ) p l o t ( hc1 ) ; p l o t ( hc2 ) ; p l o t ( hc3 ) 聚类过程中我们可能只需要对象的分类信息,那么使用 cutree() 函数也是不错的选择: 1 cut r e e ( hc , k = 1 : 3 ) 当然还有专做聚类的包:cluster 1 l i b r a r y ( c l u s t e r ) c l u s p l o t ( x , pam(x , 2) $ c l u s t e r i n g ) 123. 如何做主成分分析? stats 包中的 princomp 函数。 ( pc . c r <− princomp ( USArrests , cor = TRUE) ) 2 p lo t ( pc . c r , type = "lines" # o r ” b a r p l o t ” ) # o r s c r e e p l o t 4 l o ad ing s ( pc . c r ) princomp() 中的参数 cor = TRUE 表示使用样本相关矩阵作主成分分析,反之使用样本协方差矩 阵。loadings() 返回因子荷载。screeplot() 绘制碎石图。 124. 怎样做因子分析? 在 R 中,使用factanal() 函数对矩阵进行极大似然因子分析。 example ( f a c t ana l ) 125. 如何对样本数据进行正态检验? 比较常见的方法:shapiro.test() ,ks.test()(Kolmogorov-Smirnov 检验) ,jarque.bera.test() (需要 tseries 包)。或者参考专门用作正态检验的 normtest 包,fBasics 包中的相关函数。这几个包(包 括基础包)大概提供了十几种检验函数。 29 126. 如何做配对 t 检验? 参考 t.test() 中的 paired 参数。 1 r e qu i r e ( s t a t s ) ## S t u d e n t ’ s p a i r e d t− t e s t 3 t . t e s t ( ext ra ˜ group , data = s l eep , pa i r ed = TRUE) 这里需要注意的是数据的录入形式(主要区别于 SPSS): 事实上如果你熟悉统计检验的话,你完全可以使用 1 apropos ("test") 来返回所有关于 “检验” 的信息。比如一些常用的检验: extra group 0.7 1 -0.6 1 · · · · · · 4.6 2 3.4 2 bartlett.test 方差齐次性检验 binom.test 二项检验 chisq.test χ2 检验 cor.test 相关性检验 fisher.test Fisher 精确检验 friedman.test Friedman 秩和检验 kruskal.test Kruskal-Wallis 秩和检验 mcnemar.test McNemar 检验 pairwise.t.test 均值的多重比较 PP.test Phillips-Perron 检验 var.test 方差比检验 wilcox.test Wilcoxon 秩和检验 尽情享用吧! 127. R 如何做结构方程模型? 参考 sem 包。 128. 多项式回归应该使用什么函数? 使用 I() ,例如: 1 lm(y ˜ x + I (xˆ2) + I (x ˆ3)) 129. 如何使用方差分析(ANOVA)? 方差分析同线性回归模型很类似,毕竟它们都是线性模型。最简单实现方差分析的函数为 aov(),通 过规定函数内公式形式来指定方差分析类型: 方差分析 aov(x ˜ a) 单因素方差分析 aov(x ˜ a + b) 没有交互作用的双因素方差分析 aov(x ˜ a + b +a:b) 有交互作用的双因素方差分析 aov(x ˜ a*b) 同上 30 130. 如何求解没有常数项的线性回归模型? 只需在公式中引入 0 即可: 1 r e s u l t <− lm( smokes ˜ 0 + male + female , data=smokerdata ) 131. 如何计算回归模型参数的置信区间? 参考 confint函数,glm 模型和 nls 模型可参考 MASS 包中的 confint.glm和 confint.nls函数。 1 f i t <− lm(100 /mpg ˜ d i sp + hp + wt + am, data=mtcars ) c on f i n t ( f i t ) 3 c on f i n t ( f i t , "wt") 132. logistic 回归相关函数是? logistic 回归是关于响应变量为 0–1 定性变量的广义线性回归问题,这里需要使用广义线性模型 glm() 函数,且广义线性模型的分布族为二项分布。 广义线性模型中的常用分布族 分布 函数 模型 高斯(Gaussian)a E(y) = xTβ 普通线性模型 二项(Binomial) E(y) = exp (xT β) 1+exp (xT β) Logistic 模型和概率单位(probit)模型 泊松(Poission) E(y) = exp (xTβ) 对数线性模型 a正态(Normal) 高斯(正态)分布族的广义线性模型事实上同线性模型是相同的,即 1 f i t 1 <− glm ( formula , fami ly = gauss ian , data ) 同线性模型 1 f i t 1 <− lm( formula , data ) 得到的结论是一致的,当然效率会差很多。 133. 如何使用正交多项式回归? 我们考虑回归方程: yi = β0 + β1xi + β2x2i + . . .+ βkx k i , i = 1, 2, . . . , n, 当多项式的次数 k 比较大时,x, x2, . . . , xk 会出现线性相关问题。故需要使用正交多项式回归来克 服这方面的缺点。在 R 中,使用 poly() 函数: 1 ( z <− poly ( 1 : 1 0 , 3 ) ) 134. 如何求帽子矩阵? 参考 hat(),hatvalues() 函数。 135. D-W 检验在哪里? 31 car 包中的 durbin.watson 函数,lmtest 包中的 dwtest 函数。 1 help . search ("Durbin-Watson") 136. 如何求 Spearman 等级(或 kendall)相关系数 cor() 函数默认为求出 Person 相关系数,修改其 method 参数即可求得 Kendall τ 和 Spearman 秩 相关系数。 1 cor ( long l ey , method = "spearman") 名称 方法 用途(条件) Pearson 线性 正态总体假定 Kendall τ 协同 非参数检验 Spearman 样本秩 非参数检验 137. 如何做 Decision Tree? 基于树型方法的模型(Tree-based model)并不被统计学背景的研究者所熟悉,但它在其他领域却时 常被广泛应用。下面是 Modern Applied Statistics With S 中的例子,需要加载 rpart 包。 1 l i b r a r y ( rpar t ) s e t . seed (123) 3 cpus . rp <− rpar t ( log10 ( pe r f ) ˜ . , cpus [ , 2 : 8 ] , cp = 1e−3) p l o t ( cpus . rp , uniform = T) 5 t ex t ( cpus . rp , d i g i t s = 3) 138. 如何使用时间序列相关模型? 假设 ²t 是一组均值为 0,方差为 σ2 的不相关的序列,那么我们定义 q 阶滑动平均模型为 Xt = q∑ 0 βj²t−j p 阶自回归模型: Xt = p∑ 1 αiXt−i + ²t 定义 ARMA(p, q) 过程为 Xt = p∑ 1 αiXt−i + q∑ 0 βj²t−j 我们将加入季节因素的 arma模型称为 arima模型,R中使用 arima(x, order = c(0, 0, 0), seasonal = list(order = c(0, 0, 0)) 对模型进行拟合: 1 r e qu i r e ( g raph i c s ) ( f i t 1 <− arima ( pre s ident s , c (1 , 0 , 0 ) ) ) 3 t sd i a g ( f i t 1 ) 32 139. box-cox 变换? MASS 包中的 1 boxcox ( ) 函数。 140. 检验异方差的 Breusch-Pagan 检验? lmtest 包中的 bptest() 函数,或者利用 car 包中的 ncv.test() 函数 141. 如何做判别分析? 参考 MASS 包中的 lda() 函数(Fisher Linear D iscriminant Analysis)和 qda() 函数。 142. 计算 OLS 有没有简便方法? 有,可以使用函数 qr.solve() , 1 qr . s o l v e (X, y ) 等价于 (X ′X)−1X ′y 143. 如何进行典型相关分析? 典型相关分析是用于研究两组随机变量之间的相关性的一种统计方法。R 提供了 cancor() 函数进 行相关计算。 1 pop <− Li f eCyc l eSav ings [ , 2 : 3 ] oec <− Li f eCyc l eSav ings [ , − (2 :3) ] 3 cancor (pop , oec ) 144. 如何使用 R 做生存分析? 需要加载 survival 包。 1 # f i t a K a p l a n −M e i e r a n d p l o t i t f i t <− s u r v f i t ( Surv ( time , s t a tu s ) ˜ x , data=aml ) 3 p lo t ( f i t ) # l i f e t a b l e 5 cbind ( f i t $ time , f i t $n . r i s k , f i t $n . event , f i t $ surv ) 注意 survfit 函数中分析方法 type 中有 “kaplan-meier”,“fleming-harrington”, “fh2” 三种方法可以选 择。 §J 其他 145. R 可以使用网页来显示结果么? 33 可以。包 Rpad 提供基于同 R 的网页接口,假设已经安装了包 Rpad ,可以在本地查看 Rpad 的效 果: 1 l i b r a r y (Rpad) Rpad ( ) # e n j o y i t 146. R 有类似于 SPSS 的界面么? 有!安装包 Rcmdr ,加载包后,使用命令 Commander ( ) 调出可供使用的图形使用界面。由于这个图形使用界面需要若干基础包外的其他函数,故还需要包 car 、effects 、abind、lmtest、multcomp、relimp、RODBC、rgl 的支持。 147. 怎样来计算函数运行使用时间? 使用 system.time()。proc.time()可以获得 R进程存在的时间,system.time()通过调用两次 proc.time() 来计算函数运行的时间。 148. 在 R 中如何处理地图数据? R 提供了 maps 和 mapdata 两个包来绘制地图,其中 mapdata 提供了中国地图的相关信息: 1 l i b r a r y (mapdata ) map("china") 不过可惜,这种方法得到的中国地图没有重庆的行政区划,且各省的名称都是用数字拼装而成,不 能用 map 包中的函数像对 map("state") 一样进行进一步加工。 不过如果你熟悉地理数据,那么 maptools 包将是一个不错的选择。她可以读取、处理空间对 象,且提供了同 PBSmapping, spatstat, maps, RArcInfo, Stata tmap, WinBUGS, Mondrian 这类包 的封装接口。 149. Sweave 是用来做什么的? Sweave 提供了一种为 “混排 TEX 文本和 S 编码” 生成文档的机制。单个的 Sweave 文档中既包含 TEX 文本又包含 S 编码,通过编译最终形成的文档包含: • TEX 文档的编译输出; • S 编码和(或); • S 编码的代码输出(文本、图形)。 如果想了解更多,请参考 Sweave User Manual,或参考附录 A:Sweave 的实例。 它的文档形成过程: 34 Sweave 文档 Sweave(in R)−−−−−−−−→ TEX文档 L ATEX−−−−−−→ dvipdfmx 最终 pdf 文档 150. 如何释放 R 运行后占用的内存? 使用函数 1 gc ( ) 因为 R 是在内存中运算,所以当 R 读入了体积比较大的数据后,即使删除了相关对象,内存空间 仍不能释放。gc() 函数虽然主要用来报告内存使用情况,但是一个重要的用途便是释放内存。 151. 用什么文本编辑器比较好? 比较常用的是 Tinn–R ,RWinEdt 9 ,ESS(Emacs Speaks Statistics) ,甚至任意一款编辑器,如 UltraEdit10,这些都支持 R 语法的高亮显示。如果是 Windows 桌面环境下的用户,对这些不是很 了解,记事本也不失为一种选择。 9下载、安装 WinEdt 后,在 R 中安装 RWinEdt 包即可使用 10需要下载、修改 wordfile 35 附录 A Sweave 例 \documentclass[CJK]{cctart} \usepackage{verbatim} \title{Sweave 实例} \author{} \date{} \SweaveOpts{echo=FALSE} \begin{document} \maketitle 使用 Sweave 可以很容易地将 \LaTeX{} 同 R 的代码混排文档转化为可 编译的 \LaTeX{} 文档。 在这种混排的文档里,基本结构仍然是 \LaTeX{} 形式的,唯一的区别是, R 代码需要放置在以 $<<>>=$ 为开头,$@$为结尾的段落里面。开头部分 有两个常用的参数:echo和fig,使用逻辑值分别表示是否将 R 代码输入 作为 \LaTeX{} 文本输出;是否在 \LaTeX{} 文档中绘制图形。 这篇文档只需要在 R 中编译一遍,即可形成\LaTeX{}需要的输出(文件)。 下面是一个配对 t 检验的一个例子: <<echo = TRUE>>= require(stats) ## Student’s paired t-test m <- t.test(extra ˜ group, data = sleep, paired = TRUE) print(m) @ R 在计算过程中生成的的中间结果很容易插入到标准文档, 比如\texttt{sleep}数据的双样本的配对t检验结果 中的$p$-value是\Sexpr{format.pval(m$p.value)}; 或者是直接运算 <<echo=TRUE,results=hide>>= choose(49,6) @ 美国威力球(类似于福彩双色球)的理论组合数等于\Sexpr{choose(49,6)}。 通过这种方法处理‘‘有大量计算’’的文档,比 word 不知方便多少倍。 36 R 代码中可以随意写注释,但这些注释默认不会被输出。如果要求输出注释, 抱歉,现在还没有更好的解决办法。 使用 Sweave 还可以将 R 生成的图形加入到 \LaTeX{} 文档中,而不必事先 做出 \LaTeX{} 需要的图形文件\footnote{Sweave会自动生成 ps 和 pdf 图形}。 下图是根据Titanic号海难中人员的经济状况、性别、年龄和是否存活四 个变量绘制的马赛克图: <<fig=TRUE,echo=FALSE>>= require(graphics) mosaicplot(Titanic, main = "Survival on the Titanic") @ \end{document} Copyright c©2008 R and all the Contributors to R FAQ. All rights reserved. R 以及 R FAQ 的作者拥有版权 c©2008。保留所有权利。 Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with the Invariant Sections being Contributors, no Front-Cover Texts, and no Back-Cover Texts. 你可以拷贝、发布或者修改这份文档,但必须遵守 自由软件组织 颁布的 GNU 自由文档许可证 1.2 或者以后版本 的条款。Invariant Sections 包括 Contributors,没有 Front-Cover Texts 和 Back-Cover Texts。 37 索 引 Symbols \\ . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 .packages . . . . . . . . . . . . . . . . . . . . . 6 / . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 %*% . . . . . . . . . . . . . . . . . . . . . . . . 15 ˆ. . . . . . . . . . . . . . . . . . . . . . . . .16, 30 {} . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 A abline . . . . . . . . . . . . . . . . . . . . . . . 20 aggregate . . . . . . . . . . . . . . . . . . . . 13 any . . . . . . . . . . . . . . . . . . . . . . . . . . 11 aov . . . . . . . . . . . . . . . . . . . . . . . . . . 30 aperm . . . . . . . . . . . . . . . . . . . . . . . 12 append . . . . . . . . . . . . . . . . . . . . . . 10 apply. . . . . . . . . . . . . . . . .12, 16, 25 as.Date . . . . . . . . . . . . . . . . . . . . . . 18 as.numeric . . . . . . . . . . . . . . . . . . . 20 as.POSIXct . . . . . . . . . . . . . . . . . . 18 axes . . . . . . . . . . . . . . . . . . . . . . . . . 21 axis. . . . . . . . . . . . . . . . . . . . . . . . . .21 B barplot . . . . . . . . . . . . . . . . . . . . . . 23 boxcox. . . . . . . . . . . . . . . . . . . . . . .33 bptest . . . . . . . . . . . . . . . . . . . . . . . 33 Breusch-Pagan. . . . . . . . . . . . . . .33 C cancor . . . . . . . . . . . . . . . . . . . . . . . 33 capture.output . . . . . . . . . . . . . . . . 8 car . . . . . . . . . . . . . . . . . . . . . . . . 7, 33 casefold. . . . . . . . . . . . . . . . . . . . . .17 choose . . . . . . . . . . . . . . . . . . . . . . . 16 citation . . . . . . . . . . . . . . . . . . . . . . . 3 clipboard . . . . . . . . . . . . . . . . . . . . . 8 cluster . . . . . . . . . . . . . . . . . . . . . . . 29 cm.colors . . . . . . . . . . . . . . . . . . . . 23 col . . . . . . . . . . . . . . . . . . . . . . . . . . .23 col2rgb . . . . . . . . . . . . . . . . . . . . . . 23 colMeans . . . . . . . . . . . . . . . . . . . . 16 colors . . . . . . . . . . . . . . . . . . . . . . . . 23 combn . . . . . . . . . . . . . . . . . . . . . . . 16 Commander . . . . . . . . . . . . . . . . . 34 complex . . . . . . . . . . . . . . . . . . . . . 15 confint. . . . . . . . . . . . . . . . . . . . . . .31 confint.glm . . . . . . . . . . . . . . . . . . 31 confint.nls . . . . . . . . . . . . . . . . . . . 31 contour . . . . . . . . . . . . . . . . . . . . . . 25 crossprod . . . . . . . . . . . . . . . . . . . . 15 cumsum. . . . . . . . . . . . . . . . . .12, 24 curve . . . . . . . . . . . . . . . . . . . . . . . . 24 cutree . . . . . . . . . . . . . . . . . . . . . . . 29 D D. . . . . . . . . . . . . . . . . . . . . . . . . . . .16 data . . . . . . . . . . . . . . . . . . . . . . . . . . 6 data frame . . . . . . . . . . . . . . . . 6, 12 demo . . . . . . . . . . . . . . . . . . . . . . . . . 3 detach . . . . . . . . . . . . . . . . . . . . . . . . 5 dev.copy . . . . . . . . . . . . . . . . . . . . . 24 dev.cur . . . . . . . . . . . . . . . . . . . . . . 22 dev.list . . . . . . . . . . . . . . . . . . . . . . 22 dev.off . . . . . . . . . . . . . . . . . . . . . . . 22 dev.set . . . . . . . . . . . . . . . . . . . . . . 22 Devices . . . . . . . . . . . . . . . . . . . . . . 22 diag . . . . . . . . . . . . . . . . . . . . . . . . . 15 difftime . . . . . . . . . . . . . . . . . . . . . . 18 duplicated . . . . . . . . . . . . . . . . . . . 12 durbin.watson . . . . . . . . . . . . . . . 32 dwtest . . . . . . . . . . . . . . . . . . . . . . . 32 E edit . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 eigen . . . . . . . . . . . . . . . . . . . . . . . . 15 ESS . . . . . . . . . . . . . . . . . . . . . . . . . 35 eval. . . . . . . . . . . . . . . . . . . . . . . . . .10 F factanal. . . . . . . . . . . . . . . . . . . . . .29 factorial . . . . . . . . . . . . . . . . . . . . . 16 FALSE . . . . . . . . . . . . . . . . . . . . . . 12 file.choose. . . . . . . . . . . . . . . . . . . . .9 filled.contour . . . . . . . . . . . . . . . . 25 fivnum. . . . . . . . . . . . . . . . . . . . . . .14 fix . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 format . . . . . . . . . . . . . . . . . . . . . . . 18 G gc . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 getAnywhere. . . . . . . . . . . . . . . . . .7 getwd. . . . . . . . . . . . . . . . . . . . . . . . .5 glm. . . . . . . . . . . . . . . . . . . . . . . . . . 31 gray . . . . . . . . . . . . . . . . . . . . . . . . . 23 grep . . . . . . . . . . . . . . . . . . . . . . . . . 18 grey . . . . . . . . . . . . . . . . . . . . . . . . . 23 grid . . . . . . . . . . . . . . . . . . . . . . . . . 21 H hat,hatvalues . . . . . . . . . . . . . . . . 31 hclust . . . . . . . . . . . . . . . . . . . . . . . 29 head . . . . . . . . . . . . . . . . . . . . . . . . . . 7 heat.colors . . . . . . . . . . . . . . . . . . . 23 help . . . . . . . . . . . . . . . . . . . . . . . . . . 3 help.search. . . . . . . . . . . . . . . . . . . .3 I I . . . . . . . . . . . . . . . . . . . . . . . . . . . . .30 identical . . . . . . . . . . . . . . . . . . . . . 11 if . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 image. . . . . . . . . . . . . . . . . . . . . . . .25 integer . . . . . . . . . . . . . . . . . . . . . . .15 38 integrate. . . . . . . . . . . . . . . . . . . . .14 iris . . . . . . . . . . . . . . . . . . . . . . . . . . 20 is.na . . . . . . . . . . . . . . . . . . . . . . . . . 10 is.numeric . . . . . . . . . . . . . . . . . . . 13 J jarque.bera.test . . . . . . . . . . . . . . 29 jpeg . . . . . . . . . . . . . . . . . . . . . . . . . 23 K kmeans . . . . . . . . . . . . . . . . . . . . . . 28 ks.test . . . . . . . . . . . . . . . . . . . . . . . 29 L latex . . . . . . . . . . . . . . . . . . . . . . . . . .9 latex.table . . . . . . . . . . . . . . . . . . . . 9 layout . . . . . . . . . . . . . . . . . . . . . . . 19 lda . . . . . . . . . . . . . . . . . . . . . . . . . . 33 legend . . . . . . . . . . . . . . . . . . . . . . . 20 letters . . . . . . . . . . . . . . . . . . . . . . . 23 Library . . . . . . . . . . . . . . . . . . . . . . . 5 library . . . . . . . . . . . . . . . . . . . . . . . . 5 lines . . . . . . . . . . . . . . . . . . . . . . . . . 24 list . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 lm . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 lmtest . . . . . . . . . . . . . . . . . . . . . . . 33 loadings . . . . . . . . . . . . . . . . . . . . . 29 lower.tri . . . . . . . . . . . . . . . . . . . . . 16 ls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 M mai . . . . . . . . . . . . . . . . . . . . . . . . . . 19 mar . . . . . . . . . . . . . . . . . . . . . . . . . 19 matrix . . . . . . . . . . . . . . . . . . . 12, 16 memory.limit . . . . . . . . . . . . . . . . . 4 merge . . . . . . . . . . . . . . . . . . . . . . . 14 methods . . . . . . . . . . . . . . . . . . . . . . 7 N nchar . . . . . . . . . . . . . . . . . . . . . . . . 18 ncv.test . . . . . . . . . . . . . . . . . . . . . .33 NULL . . . . . . . . . . . . . . . . . . . . . . . 12 O optimize . . . . . . . . . . . . . . . . . . . . . 17 options . . . . . . . . . . . . . . . . . . . . . . . 4 outer . . . . . . . . . . . . . . . . . . . . . . . . 15 P Package. . . . . . . . . . . . . . . . . . . . . . .5 par . . . . . . . . . . . . . . . 19, 21, 25, 26 parplot . . . . . . . . . . . . . . . . . . . . . . 26 parse . . . . . . . . . . . . . . . . . . . . . . . . 10 paste . . . . . . . . . . . . . . . . . . . . . .4, 17 pch . . . . . . . . . . . . . . . . . . . . . . . . . . 20 pdf . . . . . . . . . . . . . . . . . . . . . . . . . . 23 persp . . . . . . . . . . . . . . . . . . . . . . . . 25 pictex . . . . . . . . . . . . . . . . . . . . . . . 23 pie . . . . . . . . . . . . . . . . . . . . . . . . . . 21 plotmath . . . . . . . . . . . . . . . . . . . . 26 pmax . . . . . . . . . . . . . . . . . . . . . . . . 13 pmin . . . . . . . . . . . . . . . . . . . . . . . . 13 png . . . . . . . . . . . . . . . . . . . . . . . . . . 23 points . . . . . . . . . . . . . . . . . . . . . . . 19 poly . . . . . . . . . . . . . . . . . . . . . . . . . 31 postscript. . . . . . . . . . . . . . . . . . . .23 princomp . . . . . . . . . . . . . . . . . . . . 29 print . . . . . . . . . . . . . . . . . . . . . . . . . .9 proc.time . . . . . . . . . . . . . . . . . . . . 34 prompt . . . . . . . . . . . . . . . . . . . . . . . 4 Q qda . . . . . . . . . . . . . . . . . . . . . . . . . . 33 qqnorm . . . . . . . . . . . . . . . . . . . . . . 25 qr.solve . . . . . . . . . . . . . . . . . . . . . . 33 Quantile Regression. . . . . . . . . .28 R rainbow . . . . . . . . . . . . . . . . . . . . . 23 Rcmdr. . . . . . . . . . . . . . . . . . . . . . .34 read.table . . . . . . . . . . . . . . . . . . . . .8 read.xls . . . . . . . . . . . . . . . . . . . . . . . 8 rect. . . . . . . . . . . . . . . . . . . . . . . . . .26 Regular Expressions. . . . . .12, 18 rev . . . . . . . . . . . . . . . . . . . . . . . . . . 13 rgb . . . . . . . . . . . . . . . . . . . . . . . . . . 23 rm. . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 RMySQL . . . . . . . . . . . . . . . . . . . . 10 rnorm . . . . . . . . . . . . . . . . 17, 21, 24 RODBC . . . . . . . . . . . . . . . . . . . . . 10 rowMeans . . . . . . . . . . . . . . . . . . . 16 Rpad . . . . . . . . . . . . . . . . . . . . . . . . 34 rpart . . . . . . . . . . . . . . . . . . . . . . . . 32 RSiteSearch. . . . . . . . . . . . . . . . . . .3 RWinEdt . . . . . . . . . . . . . . . . . . . . 35 S sample. . . . . . . . . . . . . . . . . . . . . . .13 save . . . . . . . . . . . . . . . . . . . . . . . . . . 5 save.image . . . . . . . . . . . . . . . . . . . . 5 savePlot . . . . . . . . . . . . . . . . . . . . . 23 scale . . . . . . . . . . . . . . . . . . . . . . . . . 14 screeplot . . . . . . . . . . . . . . . . . . . . .29 search . . . . . . . . . . . . . . . . . . . . . . . . 6 sem. . . . . . . . . . . . . . . . . . . . . . . . . .30 setwd . . . . . . . . . . . . . . . . . . . . . . . . . 5 shapiro.test . . . . . . . . . . . . . . . . . . 29 shell.exec . . . . . . . . . . . . . . . . . . . . . 4 show.error.messages . . . . . . . . . . 4 sink . . . . . . . . . . . . . . . . . . . . . . . . 8, 9 some. . . . . . . . . . . . . . . . . . . . . . . . . .7 sort. . . . . . . . . . . . . . . . . . . . . . . . . .21 source . . . . . . . . . . . . . . . . . . . . . . . . 9 spline . . . . . . . . . . . . . . . . . . . . . . . . 24 split.screen . . . . . . . . . . . . . . . . . . 19 sqrt. . . . . . . . . . . . . . . . . . . . . . . . . .16 stars . . . . . . . . . . . . . . . . . . . . . . . . . 22 stats . . . . . . . . . . . . . . . . . . . . . . . . . 29 stem. . . . . . . . . . . . . . . . . . . . . . . . . 21 39 step . . . . . . . . . . . . . . . . . . . . . . . . . 28 strwrap . . . . . . . . . . . . . . . . . . . . . . 21 subset . . . . . . . . . . . . . . . . . . . . . . . 11 substr . . . . . . . . . . . . . . . . . . . . . . . 18 summary . . . . . . . . . . . . . . . . . . . . 14 survfit . . . . . . . . . . . . . . . . . . . . . . . 33 Sweave . . . . . . . . . . . . . . . . . . . . . . 34 system. . . . . . . . . . . . . . . . . . . . . . . . 4 system.time . . . . . . . . . . . . . . 16, 34 T t. . . . . . . . . . . . . . . . . . . . . . . . . . . . .15 t.test . . . . . . . . . . . . . . . . . . . . . . . . 28 table . . . . . . . . . . . . . . . . . . . . . . . . 27 tail . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 tapply . . . . . . . . . . . . . . . . . . . . . . . 13 terrain.colors . . . . . . . . . . . . . . . . 23 Tinn-R . . . . . . . . . . . . . . . . . . . . . . 35 tolower . . . . . . . . . . . . . . . . . . . . . . 17 topo.colors. . . . . . . . . . . . . . . . . . .23 toupper. . . . . . . . . . . . . . . . . . . . . .17 transform. . . . . . . . . . . . . . . . . . . . 12 tseries . . . . . . . . . . . . . . . . . . . . . . . 29 U unique . . . . . . . . . . . . . . . . . . . . . . . 11 uniroot . . . . . . . . . . . . . . . . . . . . . . 16 update. . . . . . . . . . . . . . . . . . . . . . .27 update.packages . . . . . . . . . . . . . . 5 upper.tri . . . . . . . . . . . . . . . . . . . . .16 W windows . . . . . . . . . . . . . . . . . . . . . 23 with . . . . . . . . . . . . . . . . . . . . . . . . . 20 X xlsReadWrite . . . . . . . . . . . . . . . . . 8 xtable . . . . . . . . . . . . . . . . . . . . . . . . 9 40