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(),而dplyrtidyverse的一部分)也有同名的俩函数,把原来的覆盖了。所以它提示你,当你使用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的区别;如何使用一行指令读取多个包

  1. require()会返回一个逻辑值。如果包读取成功,会返回TRUE,反之则返回FALSE.
  2. 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")

  1. 另一个主要原因是,寻找对象时,R需要搜索所有已加载的包,而且,包都被加载在RAM里,因此加载过多的包会使R显著变慢。(虽然有一些开挂的方法)