10 第1章R语言介绍 1.3.2获取帮助 R提供了大量的帮助功能,学会如何使用这些帮助文档可以在相当程度上助力你的编程工作。 R的内置帮助系统提供了当前已安装包中所有函数的细节、参考文献以及使用示例。帮助文档可 以通过表1-2中列出的函数进行查看。 表1-2R中的帮助函数 函 数 功能 help.start() 打开帮助文档首页 help("foo")或?foo 查看函数foo的帮助(引号可以省略) help.search("foo")或??foo 以foo为关键词搜索本地帮助文档 example("foo") 函数fOo的使用示例(引号可以省略) RSitesearch("foo") 以foo为关键词搜索在线文档和邮件列表存档 apropos("foo",mode="function") 列出名称中含有£oo的所有可用函数 data() 列出当前已加载包中所含的所有可用示例数据集 vignette() 列出当前已安装包中所有可用的vignette.文档 vignette("foo") 为主题foo显示指定的vignette文档 函数help.start()会打开一个浏览器窗口,我们可在其中查看入门和高级的帮助手册、常 见问题集,以及参考材料。函数RSiteSearch()可在在线帮助手册和R-Help邮件列表的讨论存 档中搜索指定主题,并在浏览器中返回结果。由函数vignette()函数返回的vignette文档一般是 PDF格式的实用介绍性文章。不过,并非所有的包都提供了vignette文档。不难发现,R提供了大 量的帮助功能,学会如何使用这些帮助文档,毫无疑问地会有助于编程。我经常会使用?来查看 某些函数的功能(如选项或返回值)。 1.3.3工作空间 工作空间(workspace)就是当前R的工作环境,它储存着所有用户定义的对象(向量、矩阵、 函数、数据框、列表)。在一个R会话结束时,你可以将当前工作空间保存到一个镜像中,并在下 次启动R时自动载入它。各种命令可在R命令行中交互式地输入。使用上下方向键查看已输入命 令的历史记录。这样我们就可以选择一个之前输入过的命令并适当修改,最后按回车重新执行它。 当前的工作目录(working directory)是R用来读取文件和保存结果的默认目录。我们可以使 用函数getwd()来查看当前的工作目录,或使用函数setwd()设定当前的工作目录。如果需要读 入一个不在当前工作目录下的文件,则需在调用语句中写明完整的路径。记得使用引号闭合这些 目录名和文件名。 用于管理工作空间的部分标准命令见表1-3。 ①确切地说,这里的“所有”是指那些已导出的(exported)、对用户可见的函数。一译者注 图灵社区会员matrixvirus(matrixvirus@163.com))专享尊重版权
10 第 1 章 R 语言介绍 1.3.2 获取帮助 R提供了大量的帮助功能,学会如何使用这些帮助文档可以在相当程度上助力你的编程工作。 R的内置帮助系统提供了当前已安装包中所有函数①的细节、参考文献以及使用示例。帮助文档可 以通过表1-2中列出的函数进行查看。 表1-2 R中的帮助函数 函 数 功 能 help.start() 打开帮助文档首页 help("foo")或?foo 查看函数foo的帮助(引号可以省略) help.search("foo")或??foo 以foo为关键词搜索本地帮助文档 example("foo") 函数foo的使用示例(引号可以省略) RSiteSearch("foo") 以foo为关键词搜索在线文档和邮件列表存档 apropos("foo", mode="function") 列出名称中含有foo的所有可用函数 data() 列出当前已加载包中所含的所有可用示例数据集 vignette() 列出当前已安装包中所有可用的vignette文档 vignette("foo") 为主题foo显示指定的vignette文档 函数help.start()会打开一个浏览器窗口,我们可在其中查看入门和高级的帮助手册、常 见问题集,以及参考材料。函数RSiteSearch()可在在线帮助手册和R-Help邮件列表的讨论存 档中搜索指定主题,并在浏览器中返回结果。由函数vignette()函数返回的vignette文档一般是 PDF格式的实用介绍性文章。不过,并非所有的包都提供了vignette文档。不难发现,R提供了大 量的帮助功能,学会如何使用这些帮助文档,毫无疑问地会有助于编程。我经常会使用?来查看 某些函数的功能(如选项或返回值)。 1.3.3 工作空间 工作空间(workspace)就是当前R的工作环境,它储存着所有用户定义的对象(向量、矩阵、 函数、数据框、列表)。在一个R会话结束时,你可以将当前工作空间保存到一个镜像中,并在下 次启动R时自动载入它。各种命令可在R命令行中交互式地输入。使用上下方向键查看已输入命 令的历史记录。这样我们就可以选择一个之前输入过的命令并适当修改,最后按回车重新执行它。 当前的工作目录(working directory)是R用来读取文件和保存结果的默认目录。我们可以使 用函数getwd()来查看当前的工作目录,或使用函数setwd()设定当前的工作目录。如果需要读 入一个不在当前工作目录下的文件,则需在调用语句中写明完整的路径。记得使用引号闭合这些 目录名和文件名。 用于管理工作空间的部分标准命令见表1-3。 —————————— ① 确切地说,这里的“所有”是指那些已导出的(exported)、对用户可见的函数。——译者注 图灵社区会员 matrixvirus(matrixvirus@163.com) 专享 尊重版权
1.3R的使用 11 表1-3用于管理R工作空间的函数 函 数 功 能 getwd() 显示当前的工作目录 setwd("mydirectory") 修改当前的工作目录为mydirectory 1s() 列出当前工作空间中的对象 rm(objectlist) 移除(删除)一个或多个对象 help(options) 显示可用选项的说明 options() 显示或设置当前选项 history(#) 显示最近使用过的#个命令(默认值为25) savehistory("myfile") 保存命令历史到文件myfile中(默认值为.Rhistory) loadhistory("myfile") 载入一个命令历史文件(默认值为.Rhistory) save.image("myfile") 保存工作空间到文件myfile中(默认值为RData) save(objectlist,file="myfile") 保存指定对象到一个文件中 load("myfile") 读取一个工作空间到当前会话中(默认值为.RData) q() 退出R。将会询问你是否保存工作空间 要了解这些命令是如何运作的,运行代码清单1-2中的代码并查看结果。 代码清单1-2用于管理R工作空间的命令使用示例 setwd("C:/myprojects/project1") options() options(digits=3) x <-runif(20) summary (x) hist(x) savehistory() save.image() g() 首先,当前工作目录被设置为C:myprojects/projectl,当前的选项设置情况将显示出来,而 数字将被格式化,显示为具有小数点后三位有效数字的格式。然后,我们创建了一个包含20个均 匀分布随机变量的向量,生成了此数据的摘要统计量和直方图。最后,命令的历史记录保存到文 件Rhistory中,工作空间(包含向量x)保存到文件RData中,会话结束。 注意setwd()命令的路径中使用了正斜杠。R将反斜杠(\)作为一个转义符。即使在Windows 平台上运行R,在路径中也要使用正斜杠。同时注意,函数setwd()不会自动创建一个不存在的 目录。如果必要的话,可以使用函数dir.create()来创建新目录,然后使用setwd()将工作目 录指向这个新目录。 在独立的目录中保存项目是一个好主意。我通常会在启动一个R会话时使用setwd()命令指 定到某一个项目的路径,后接不加选项的1oad()命令。这样做可以让我从上一次会话结束的地 方重新开始,并保证各个项目之间的数据和设置互不千扰。在Windows和Mac OS X平台上就更简 图灵社区会员matrixvirus(matrixvirus@163.com))专享尊重版权
1.3 R 的使用 11 1 2 3 4 5 16 6 7 8 9 10 11 12 13 14 15 表1-3 用于管理R工作空间的函数 函 数 功 能 getwd() 显示当前的工作目录 setwd("mydirectory") 修改当前的工作目录为mydirectory ls() 列出当前工作空间中的对象 rm(objectlist) 移除(删除)一个或多个对象 help(options) 显示可用选项的说明 options() 显示或设置当前选项 history(#) 显示最近使用过的#个命令(默认值为25) savehistory("myfile") 保存命令历史到文件myfile中(默认值为.Rhistory) loadhistory("myfile") 载入一个命令历史文件(默认值为.Rhistory) save.image("myfile") 保存工作空间到文件myfile中(默认值为.RData) save(objectlist, file="myfile") 保存指定对象到一个文件中 load("myfile") 读取一个工作空间到当前会话中(默认值为.RData) q() 退出R。将会询问你是否保存工作空间 要了解这些命令是如何运作的,运行代码清单1-2中的代码并查看结果。 代码清单1-2 用于管理R工作空间的命令使用示例 首先,当前工作目录被设置为C:/myprojects/project1,当前的选项设置情况将显示出来,而 数字将被格式化,显示为具有小数点后三位有效数字的格式。然后,我们创建了一个包含20个均 匀分布随机变量的向量,生成了此数据的摘要统计量和直方图。最后,命令的历史记录保存到文 件.Rhistory中,工作空间(包含向量x)保存到文件.RData中,会话结束。 注意setwd()命令的路径中使用了正斜杠。R将反斜杠(\)作为一个转义符。即使在Windows 平台上运行R,在路径中也要使用正斜杠。同时注意,函数setwd()不会自动创建一个不存在的 目录。如果必要的话,可以使用函数dir.create()来创建新目录,然后使用setwd()将工作目 录指向这个新目录。 在独立的目录中保存项目是一个好主意。我通常会在启动一个R会话时使用setwd()命令指 定到某一个项目的路径,后接不加选项的load()命令。这样做可以让我从上一次会话结束的地 方重新开始,并保证各个项目之间的数据和设置互不干扰。在Windows和Mac OS X平台上就更简 图灵社区会员 matrixvirus(matrixvirus@163.com) 专享 尊重版权
12 第1章R语言介绍 单了。跳转到项目所在目录并双击保存的镜像文件即可。这样做可以启动R,载入保存的工作空 间,并设置当前工作目录到这个文件夹中。 1.3.4输入和输出 启动R后将默认开始一个交互式的会话,从键盘接受输入并从屏幕进行输出。不过你也可以 处理写在一个脚本文件(一个包含了R语句的文件)中的命令集并直接将结果输出到多类目标中。 1.输入 函数source("filename")可在当前会话中执行一个脚本。如果文件名中不包含路径,R将 假设此脚本在当前工作目录中。举例来说,source("myscript.R")将执行包含在文件 myscript.R中的R语句集合。依照惯例,脚本文件以R作为扩展名,不过这并不是必需的。 2.文本输出 函数sink("filename")将输出重定向到文件filename中。默认情况下,如果文件已经存 在,则它的内容将被覆盖。使用参数append:=TRUE可以将文本追加到文件后,而不是覆盖它。 参数split=T℉UE可将输出同时发送到屏幕和输出文件中。不加参数调用命令sink()将仅向屏幕 返回输出结果。 3.图形输出 虽然sik()可以重定向文本输出,但它对图形输出没有影响。要重定向图形输出,使用 表1-4中列出的函数即可。最后使用dev.off()将输出返回到终端。 表1-4用于保存图形输出的函数 函数 输 出 pdf("filename.pdf") PDF文件 win.metafile("filename.wmf") Windows图元文件 png("filename.png") PBG文件 jpeg("filename.jpg") JPEG文件 bmp ("filename.bmp") BMP文件 postscript("filename.ps") PostScript文件 让我们通过一个示例来了解整个流程。假设我们有包含R代码的三个脚本文件script1.R、 script2.R和script3.R。执行语句: source("script1.R") 将会在当前会话中执行scriptI.R中的R代码,结果将出现在屏幕上。 如果执行语句: sink("myoutput",append=TRUE,split=TRUE) paf("mygraphs.paf") source("script2.R") 文件scip2.R中的R代码将执行,结果也将显示在屏幕上。除此之外,文本输出将被追加到文件 图灵社区会员matrixvirus(matrixvirus@163.com))专享尊重版权
12 第 1 章 R 语言介绍 单了。跳转到项目所在目录并双击保存的镜像文件即可。这样做可以启动R,载入保存的工作空 间,并设置当前工作目录到这个文件夹中。 1.3.4 输入和输出 启动R后将默认开始一个交互式的会话,从键盘接受输入并从屏幕进行输出。不过你也可以 处理写在一个脚本文件(一个包含了R语句的文件)中的命令集并直接将结果输出到多类目标中。 1. 输入 函数source("filename")可在当前会话中执行一个脚本。如果文件名中不包含路径,R将 假设此脚本在当前工作目录中。举例来说,source("myscript.R")将执行包含在文件 myscript.R中的R语句集合。依照惯例,脚本文件以.R作为扩展名,不过这并不是必需的。 2. 文本输出 函数sink("filename")将输出重定向到文件filename中。默认情况下,如果文件已经存 在,则它的内容将被覆盖。使用参数append=TRUE可以将文本追加到文件后,而不是覆盖它。 参数split=TRUE可将输出同时发送到屏幕和输出文件中。不加参数调用命令sink()将仅向屏幕 返回输出结果。 3. 图形输出 虽然sink()可以重定向文本输出,但它对图形输出没有影响。要重定向图形输出,使用 表1-4中列出的函数即可。最后使用dev.off()将输出返回到终端。 表1-4 用于保存图形输出的函数 函 数 输 出 pdf("filename.pdf") PDF文件 win.metafile("filename.wmf") Windows图元文件 png("filename.png") PBG文件 jpeg("filename.jpg") JPEG文件 bmp("filename.bmp") BMP文件 postscript("filename.ps") PostScript文件 让我们通过一个示例来了解整个流程。假设我们有包含R代码的三个脚本文件script1.R、 script2.R和script3.R。执行语句: 将会在当前会话中执行script1.R中的R代码,结果将出现在屏幕上。 如果执行语句: 文件script2.R中的R代码将执行,结果也将显示在屏幕上。除此之外,文本输出将被追加到文件 图灵社区会员 matrixvirus(matrixvirus@163.com) 专享 尊重版权
1.3R的使用13 myoutput中,图形输出将保存到文件nygraphs.pdf中。 最后,如果我们执行语句: sink() dev,off() source("script3.R") 文件scp3.R中的R代码将执行,结果将显示在屏幕上。这一次,没有文本或图形输出保存到文 件中。整个流程大致如图1-6所示。 source("script1.R") script1.R 当前会话 sink("myoutput",append=TRUE,split=TRUE) script2.R source("script2.R") 当前会话 myoutput 输出后被追加到 pdf("mygraphs.pdf") 文件后 sink(),dev.off() source("script3.R") script3.R 当前会话 图1-6使用函数source()进行输入并使用函数sink()进行输出 R对输入来源和输出走向的处理相当灵活,可控性很强。在1.5节中,我们将学习如何在批处 图灵社区会员matrixvirus(matrixvirus(@163.com)专享尊重版权
1.3 R 的使用 13 1 2 3 4 5 16 6 7 8 9 10 11 12 13 14 15 myoutput中,图形输出将保存到文件mygraphs.pdf中。 最后,如果我们执行语句: 文件script3.R中的R代码将执行,结果将显示在屏幕上。这一次,没有文本或图形输出保存到文 件中。整个流程大致如图1-6所示。 图1-6 使用函数source()进行输入并使用函数sink()进行输出 R对输入来源和输出走向的处理相当灵活,可控性很强。在1.5节中,我们将学习如何在批处 图灵社区会员 matrixvirus(matrixvirus@163.com) 专享 尊重版权
14 第1章R语言介绍 理模式下运行R程序。 1.4包 提供了大量开箱即用的功能,但它最激动人心的一部分功能是通过可选模块的下载和安装 来实现的。目前有2500多个①称为包(package)的用户贡献模块可从http://cran.r-project..org web/packages下载。这些包提供了横跨各种领域、数量惊人的新功能,包括分析地理数据、处理 蛋白质质谱,甚至是心理测验分析的功能。本书中多次使用了这些可选包。 1.4.1什么是包 包是R函数、数据、预编译代码以一种定义完善的格式组成的集合。计算机上存储包的目录 称为库(library)。函数.libPaths()能够显示库所在的位置,函数1 ibrary()则可以显示库中 有哪些包。 R自带了一系列默认包(包括base、datasets、utils、grDevices、graphics、stats 以及methods),它们提供了种类繁多的默认函数和数据集。其他包可通过下载来进行安装。安装 好以后,它们必须被载入到会话中才能使用。命令search()可以告诉你哪些包已加载并可使用。 1.4.2包的安装 有许多R函数可以用来管理包。第一次安装一个包,使用命令instal1.packages()即可。 举例来说,不加参数执行instal1.packages()将显示一个CRAN镜像站点的列表,选择其中一 个镜像站点之后,将看到所有可用包的列表,选择其中的一个包即可进行下载和安装。如果知道 自己想安装的包的名称,可以直接将包名作为参数提供给这个函数。例如,包gc1us中提供了创 建增强型散点图的函数。可以使用命令instal1.packages("gclus")来下载和安装它。 一个包仅需安装一次。但和其他软件类似,包经常被其作者更新。使用命令update.packages() 可以更新已经安装的包。要查看已安装包的描述,可以使用installed.packages()命令,这 将列出安装的包,以及它们的版本号、依赖关系等信息。 1.4.3包的载入 包的安装是指从某个CRAN镜像站点下载它并将其放入库中的过程。要在R会话中使用它, 还需要使用1 ibrary()命令载入这个包。例如,要使用gclus包,执行命令library(gc1us) 即可。当然,在载人一个包之前必须已经安装了这个包。在一个会话中,包只需载入一次。如果 需要,你可以自定义启动环境以自动载入会频繁使用的那些包。启动环境的自定义在附录B中有 详细描述。 ①截至本书中文版面世时,已超过4000个。一译者注 图灵社区会员matrixvirus(matrixvirus@163.com))专享尊重版权
14 第 1 章 R 语言介绍 理模式下运行R程序。 1.4 包 R提供了大量开箱即用的功能,但它最激动人心的一部分功能是通过可选模块的下载和安装 来实现的。目前有2500多个① 称为包(package)的用户贡献模块可从http://cran.r-project.org/ web/packages下载。这些包提供了横跨各种领域、数量惊人的新功能,包括分析地理数据、处理 蛋白质质谱,甚至是心理测验分析的功能。本书中多次使用了这些可选包。 1.4.1 什么是包 包是R函数、数据、预编译代码以一种定义完善的格式组成的集合。计算机上存储包的目录 称为库(library)。函数.libPaths()能够显示库所在的位置, 函数library()则可以显示库中 有哪些包。 R自带了一系列默认包(包括base、datasets、utils、grDevices、graphics、stats 以及methods),它们提供了种类繁多的默认函数和数据集。其他包可通过下载来进行安装。安装 好以后,它们必须被载入到会话中才能使用。命令search()可以告诉你哪些包已加载并可使用。 1.4.2 包的安装 有许多R函数可以用来管理包。第一次安装一个包,使用命令install.packages()即可。 举例来说,不加参数执行install.packages()将显示一个CRAN镜像站点的列表,选择其中一 个镜像站点之后,将看到所有可用包的列表,选择其中的一个包即可进行下载和安装。如果知道 自己想安装的包的名称,可以直接将包名作为参数提供给这个函数。例如,包gclus中提供了创 建增强型散点图的函数。可以使用命令install.packages("gclus")来下载和安装它。 一个包仅需安装一次。但和其他软件类似,包经常被其作者更新。使用命令update.packages() 可以更新已经安装的包。要查看已安装包的描述,可以使用installed.packages()命令,这 将列出安装的包,以及它们的版本号、依赖关系等信息。 1.4.3 包的载入 包的安装是指从某个CRAN镜像站点下载它并将其放入库中的过程。要在R会话中使用它, 还需要使用library()命令载入这个包。例如,要使用gclus包,执行命令library(gclus) 即可。当然,在载入一个包之前必须已经安装了这个包。在一个会话中,包只需载入一次。如果 需要,你可以自定义启动环境以自动载入会频繁使用的那些包。启动环境的自定义在附录B中有 详细描述。 —————————— ① 截至本书中文版面世时,已超过4000个。——译者注 图灵社区会员 matrixvirus(matrixvirus@163.com) 专享 尊重版权