R有一万多个扩展软件包,提供了各种各样的功能。
在安装基本R软件时, 已经伴随安装了一些必要的扩展包, 如base, stats, graphics等, 这些包在启动R时会默认载入, 不需要用户干预。
其它扩展包在安装好以后如果需要调用, 一般需要先用library()
函数载入运行。
例如,载入readr
扩展包,并使用其中的read_csv()
函数读入一个CSV文件:
library(readr)
d <- read_csv("class.csv")
有些扩展包允许不载入而直接用“扩展包名::函数名()”的格式调用其中的功能,如:
d <- readr::read_csv("class.csv")
因为不同的扩展包可能会使用相同的函数名称, 所以在两个扩展包中的函数名字有冲突时, 也应该使用“扩展包名::函数名()”这种语法。
例如,stats包和dplyr包都提供了名为filter()
的函数, 在调用此函数时, 就应该指定为stats::filter()
和dplyr::filter()
。
在使用library()
函数载入扩展包时, 会显示一些诊断信息、提示信息、警告信息。 在交互运行时这些信息是必要的, 但是在使用R Markdown格式制作论文、技术报告、图书时, 这些信息则会分散注意力, 显得不专业, 这时可以增加选项,载入命令如:
library(tidyverse,
warn.conflicts=FALSE,
quietly=TRUE,
verbose=FALSE) |>
suppressMessages() |>
suppressWarnings()
当然这都是后话了
以安装sos包为例。sos包用来搜索某些函数的帮助文档。
在RStudio中调用用“Tools”菜单的“Install Packages”, 输入或者在列表中选中sos就可以安装该扩展包。
如果不用RStudio, 在R图形界面选菜单“程序包-安装程序包”, 在弹出的“CRAN mirror”选择窗口中选择一个中国的镜像如“China (Beijing 2)”, 然后在弹出的“Packages”选择窗口中选择要安装的扩展软件包名称, 即可完成下载和安装。
还可以用如下程序指定镜像网站(例子中是位于清华大学的镜像网站)并安装指定的扩展包:
options(repos=c(CRAN="https://mirror.tuna.tsinghua.edu.cn/CRAN/"))
install.packages("sos")
还可以选择扩展包的安装路径, 如果权限允许, 可以选择安装在R软件的主目录内或者用户自己的私有目录位置。
由于用户的对子目录的读写权限问题, 有时不允许一般用户安装扩展包到R的主目录中。 用.libPaths()
查看允许的扩展包安装位置, 在install.packages()
中用lib=
指定安装位置:
print(.libPaths())
## [1] "D:/R/R-4.1.0/library"
install.packages("sos", lib=.libPaths()[1])
还有一些扩展包没有在CRAN系统提供, 而是放在了Github网站。 对于这样的包, 安装方法举例如下:
if(!require(devtools)) install.packages('devtools')
devtools::install_github("kjhealy/socviz")
其中kjhealy
是Github网站的某个作者的名称, socviz
是该作者名下的一个R扩展包。
还有一些包需要从Bioconductor网站安装,可利用镜像网站。 利用清华大学镜像的示例如下:
options(repos=c(CRAN="https://mirror.tuna.tsinghua.edu.cn/CRAN/"))
if (!requireNamespace("BiocManager", quietly = TRUE)){
install.packages("BiocManager")
BiocManager::install()
}
options(BioC_mirror="https://mirrors.tuna.tsinghua.edu.cn/bioconductor")
BiocManager::install(c("Biostrings"))
随后安装Bioconductor的其它包, 也应该先设置repos
和Bioc_mirror
选项。
在RStudio中用“Tools–Check for Package Updates”菜单, 可以显示有新版本的扩展包, 并选择进行更新。
或者在命令行用如下命令更新本地安装的所有有新版本的CRAN扩展包:
options(repos=c(CRAN="http://mirror.tuna.tsinghua.edu.cn/CRAN/"))
update.packages(checkBuilt=TRUE, ask=FALSE)
RStudio在运行时会载入某些包, 如rlang, 这使得RStudio无法更新这些包, 需要在R的命令行程序(就是基本R软件)中更新。
在每一次R软件更新后, 需要重新安装原来的软件包, 这个过程很麻烦。 如果仅仅是小的版本更新, 比如从3.5.1变成3.5.2, 或者从3.4.2变成3.5.0, 可以在安装新版本后, 临时将新版本的library子目录更名为library0, 将老版本的library子目录剪切为新版本的library子目录, 然后将library0中所有内容复制并覆盖进入library子目录, 删除library0即可。
然后在基本R中(不要用RStudio)运行如下命令以更新有新版本的包:
options(repos=c(CRAN="http://mirror.tuna.tsinghua.edu.cn/CRAN/"))
update.packages(checkBuilt=TRUE, ask=FALSE)
如果版本改变比较大, 可以用如下方法批量地重新安装原有的软件包。 首先,在更新R软件前,在原来的R中运行:
packages <- .packages(TRUE)
dump("packages", file="packages-20180704.R")
这样可以获得要安装的软件包的列表。 在更新R软件后, 运行如下程序:
options(repos=c(CRAN="http://mirror.tuna.tsinghua.edu.cn/CRAN/"))
source("packages-20180704.R")
install.packages(packages)
安装时如果提问是否安装需要编译的源代码包, 最好选择否, 因为安装源代码包速度很慢还有可能失败。
在使用了R一段较长时间以后, 会安装了许多扩展包, 这些扩展包在某个时期是有用的, 但是一旦某个任务完成了就不再有用。 但是, 用户自己无法判断哪些包已经不需要。
R的renv扩展包支持每个项目保存私有的扩展包目录, 这样, 不同的项目使用不同的扩展包集合, 不至于引发版本冲突, 也不必总是为公用的R扩展包目录增加许多仅是短暂使用的扩展包。 用renv管理项目私有扩展包目录, 也有利于将项目迁移到其它电脑中, 并且保证每次使用的扩展包版本号不变, 避免多个项目共用的扩展包升级造成兼容性问题。
那些不需要安装许多扩展包的项目仍可以不启用renv, 使用公用的R扩展包目录。
在生成新的RStudio项目时, 可以点击选中“Use renv with this project”复选框; 对已有的RStdio项目, 如果要启用renv, 可以选菜单“Tools – Project Options – Environment”, 选中“Use renv with this project”复选框。
启用了renv的项目, 在安装新的扩展包时, 将安装在项目目录中, 而不再修改R的公用的扩展包目录。 这也有助于将项目迁移到其它计算机上。