1.4 安装和使用包 (packages)
1.4.1 包是什么,为什么使用它们?
包是别人写好的在R中运行的程序(以及附带的数据和文档),你可以免费安装和使用它们。
包可以增加在基础R语言中没有的功能,可以精简你代码的语句,或是提升使用体验。比如有个叫做tikzDevice
的包可以将R中的图表导出成tikz语法的矢量图,方便在LaTeX中使用。本书的编写和排版也是使用R中的一个叫做bookdown
的包完成的.
这个课程主要是学习tidyverse
这个包,
1.4.2 如何安装包
首先我们安装tidyverse(很重要,本书接下来的部分都要使用这个包):
install.packages("tidyverse")
在console中运行以上代码,R就会从CRAN中下载tidyverse并安装到你电脑上的默认位置。因此安装包需要网络连接。
如果想安装多个包,你可以一行一行地安装,或是把多个包的名字合成一列,同时安装,比如:
install.packages(c("nycflights13", "gapminder", "Lahman")
绝大多数的包都能用这个方法安装,因为它们是被存储在CRAN上的。Bioconductor 包请看第1.4.4.2节。
1.4.3 如何使用包
1.4.3.1 加载包
安装包后,有两种方法使用它们。以tidyverse
为例:
library('tidyverse')
或
require('tidyverse')
两者的效果很大程度上都是一样的,都可以用来读取单个包。它们的不同,以及如何通过一行指令读取多个包,请参看第1.4.4.1节。
每次重启R的时候,上一次使用的包都会被清空,所以需要重新读取。因此我们要在R脚本里面记录此script需要使用的包(这个特性可以帮助你养成好习惯:当你把你的代码分享给别人的时候,要保证在别人的电脑上也能正常运行,就必须要指明要使用哪些包).13
1.4.3.2 使用包里的内容
刚才加载tidyverse
的时候,你也许注意到了这样一条提示:
── Conflicts ─────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag() masks stats::lag()
这是因为R本来自带了一个叫做stats
的包,有俩函数名曰filter()
和lag()
,而dplyr
(tidyverse
的一部分)也有同名的俩函数,把原来的覆盖了。所以它提示你,当你使用filter()
和lag()
时,使用的是dplyr
的版本,而不是原来stats
里的。
这不意味着stats
里的这两个函数就不能用了。要使用他们,用这个格式就好了:
stats::filter()
同样的道理也适用于其他的包. 你可以通过
dplyr::filter()
使用dplyr
版本的filter()
。虽然这是个好习惯,但是不强制要求。如果函数/对象名称有重叠,以包的加载顺序决定优先度;最近(即最后)被加载的包里的函数/对象胜出,而其余的要通过packageName::object
的形式调取。
1.4.3.3 更新和卸载包
更新:update.packages()
;卸载:remove.packages()
;两者皆可在RStudio右下角的Package区进行操作。
1.4.4 其它
这小节是一些不重要的内容,因此可酌情跳到下一章(第2章)。
1.4.4.1 library()
和require
的区别;如何使用一行指令读取多个包
require()
会返回一个逻辑值。如果包读取成功,会返回TRUE
,反之则返回FALSE
.library()
如果读取试图读取不存在的包,会直接造成错误 (error),而require()
不会造成错误,只会产生一个警告 (warning).
这意味着require()
可以用来同时读取多个包:
lapply(c("dplyr","ggplot2"), require, character.only = TRUE)
或者更精简一点,
lapply(c("dplyr","ggplot2"), require, c = T)
1.4.4.2 安装Bioconductor中的包
Bioconductor是一系列用于生物信息学的R包. 截止2019年7月2日,共有1741个可用的bioconductor包. 它们没有被存储在CRAN上,因此需要用特殊的方法安装。首先,安装一系列Bioconductor的核心包(可能需要几分钟):
source("http://bioconductor.org/biocLite.R")
biocLite()
然后,通过biocLite()
函数安装其它包,比如:
biocLite("RforProteomics")
另一个主要原因是,寻找对象时,R需要搜索所有已加载的包,而且,包都被加载在RAM里,因此加载过多的包会使R显著变慢。(虽然有一些开挂的方法)↩