什么是 R 包?
R 包是社区开发的函数与数据集的集合。它们通过改进基础 R 的现有功能或新增功能来增强 R 的能力。举例来说,如果您经常使用数据框,您很可能听说过 dplyr 或 data.table,这两者都是最受欢迎的 R 包之一。
一个包通常会把 R 代码(有时包含已编译的 C 或 Fortran 代码)、文档、测试和数据集打包为一个可共享、可复用的单元。
关于包的基本信息位于 DESCRIPTION 文件 中,您可以在其中了解包的功能、作者、文档对应的版本、日期、许可类型以及包的依赖关系。
请注意,您也可以使用替代的 stats 链接查看 DESCRIPTION 文件。
除了在 cran.r-project.org 或 stat.ethz.ch 等处查看 DESCRIPTION 文件,您还可以在 R 内通过 packageDescription("package") 命令获取,或通过包的文档 help(package = "package"),也可以在线在包的代码仓库中查看。
例如,对于 “stats” 包,可以这样做:
packageDescription("stats")
help(package = "stats")
什么是 R 仓库?
仓库是存放包的位置,您可以从中安装包。尽管您或您的组织可能有本地仓库,但通常仓库位于线上,所有人都可访问。最受欢迎的三个 R 包仓库是:
- CRAN:官方仓库,由全球 R 社区维护的 ftp 和 Web 服务器网络。R 基金会进行协调。包要在此发布,需通过多项测试以确保遵循 CRAN 政策。
- Bioconductor:面向生物信息学开源软件的专题仓库。与 CRAN 一样,它有自己的提交与评审流程,社区也非常活跃,每年有多次会议与交流。
- GitHub:尽管不是 R 专属,GitHub 可能是最受欢迎的开源项目托管平台。它的优势在于为开源项目提供无限空间、与版本控制工具 git 的集成,以及便于分享和协作。但需要注意,它不提供审核流程。
如何安装 R 包
安装 R 包有多种方式。
从 CRAN 安装 R 包
最常见的方式是从 CRAN 安装。您只需知道包名,然后调用 install.packages("package")。若包托管在其他位置(Bioconductor、GitHub),安装方法会不同——我会在下文分别介绍。
例如,CRAN 上最早发布且仍在线并在更新的包是 Daniel Adler 的 vioplot 包。
其最初的发布日期位于包的 DESCRIPTION 文件中。
要从 CRAN 安装它,您需要:
install.packages("vioplot")
运行后,R 会打印关于下载来源、安装进度及是否成功的消息。以下是您可能看到的精简示例:
Installing package into '/home/username/R/x86_64-pc-linux-gnu-library/4.6'
(as 'lib' is unspecified)
trying URL 'https://cloud.r-project.org/src/contrib/vioplot_0.4.0.tar.gz'
...
* DONE (vioplot)
输出会告诉您包的安装位置、下载来源以及安装是否成功。根据操作系统不同,这些消息可能有所差异。
最后,若要一次安装多个 R 包,只需在 install.packages() 的第一个参数中以字符向量形式写出它们:
install.packages(c("vioplot", "MASS"))
从 CRAN 镜像安装
请记住,CRAN 是一组服务器的网络(每个称为“镜像”),您可以指定要使用的镜像。如果您通过 RGui 界面使用 R,可以在调用 install.packages() 命令后弹出的列表中选择。在 RStudio 中,镜像通常已默认选定。
您也可以使用 chooseCRANmirror() 选择镜像,或在 install.packages() 中通过 repo 参数直接指定。可用镜像列表可由 getCRANmirrors() 获取,或直接查看CRAN 镜像页面。
示例:要使用根特大学图书馆(比利时)的镜像安装 vioplot 包,可以运行:
install.packages("vioplot", repos = "https://lib.ugent.be/CRAN")
安装 Bioconductor 包
Bioconductor 包通过 BiocManager 包安装。首先,从 CRAN 安装 BiocManager:
install.packages("BiocManager")
然后按名称安装 Bioconductor 包:
BiocManager::install(c("GenomicFeatures", "AnnotationDbi"))
要安装或更新所有 Bioconductor 核心包,可不带参数调用 BiocManager::install()。当前发行版为 Bioconductor 3.23,需要 R 4.6.0。详情参见官方安装指南。
通过 devtools 安装包
如上所述,每个仓库都有各自的安装方式,如果您经常从不同来源安装包,这种差异可能会让人不便。更高效的方法可能是使用 devtools 简化流程,因为它针对各仓库(包括 CRAN)都提供了专用函数。
您可以像往常一样使用 install.packages("devtools") 安装 devtools,但可能还需要在 Windows 上安装 Rtools、在 Mac 上安装 Xcode 命令行工具,或在 Linux 上安装 r-base-dev 与 r-devel。
安装好 devtools 后,您就可以使用其中的工具函数安装其他包。选项包括:
-
从 Bioconductor 安装的
install_bioc(), -
从 Bitbucket 安装的
install_bitbucket(), -
从 CRAN 安装的
install_cran(), -
从 git 仓库安装的
install_git(), -
从 GitHub 安装的
install_github(), -
从本地文件安装的
install_local(), -
从 SVN 仓库 安装的
install_svn(), -
从 URL 安装的
install_url(),以及 -
从 CRAN 包的特定版本安装的
install_version()。
例如,要从其 GitHub 仓库安装 babynames 包,您可以使用:
devtools::install_github("hadley/babynames")
如何更新、移除并检查已安装的 R 包
随着您使用 R 的时间增加,您可能每周甚至每天都会多次使用 install.packages()。考虑到 R 包开发的速度,不久之后您很可能需要更新或替换常用包。本节将介绍一些有助于管理包集合的函数。
- 检查您的计算机上安装了哪些包:
installed.packages()
- 使用
remove.packages()可直接卸载包,例如:
remove.packages("vioplot")
- 检查哪些包需要更新:
old.packages()
- 更新所有包:
update.packages()
- 通过重新安装来更新特定包:
install.packages("vioplot")
使用 renv 管理包
对于项目级依赖管理,renv 包(由 Posit 维护)可创建隔离且可复现的包环境——类似于 Python 的虚拟环境。
install.packages("renv")
# Initialize renv in your project
renv::init()
# Take a snapshot of current packages
renv::snapshot()
# Restore packages from the lockfile
renv::restore()
renv 将精确的包版本记录在 renv.lock 文件中,因此协作者可以用 renv::restore() 复现您的环境。这对团队协作和长期项目尤为有用。
通过图形界面安装 R 包
如果您更喜欢图形界面,RStudio 和 RGui 都提供了包管理工具。在 RStudio(现由 Posit 开发)中,前往 Tools → Install Packages,并在对话框中输入包名。要全面了解 RStudio,请参阅我们的 RStudio 教程。

在 RGui 中,您可以在 Packages 菜单下找到相关工具。

如何加载包
安装包后,您即可使用其功能。如果您只是偶尔需要调用包内的少量函数或数据,可以使用 packagename::functionname() 的形式访问。例如,既然已安装 babynames 包,您可以探索其中的某个数据集。
要查看包中包含哪些函数与数据,使用 help(package = "babynames")。
要访问 babynames 包中的 births 数据集,只需输入:
babynames::births
## # A tibble: 6 x 2
## year births
## <int> <int>
## 1 2009 4130665
## 2 2010 3999386
## 3 2011 3953590
## 4 2012 3952841
## 5 2013 3932181
## 6 2014 3988076
如果您会更频繁地使用该包,那么将其加载到内存可能更方便。最简单的方法是使用 library() 命令。
请注意,install.packages() 的输入是字符向量,需要用引号包裹包名;而 library() 可以接受字符或名称,因此可不加引号书写包名。
加载后,您无需再使用 package::function() 的形式,可以像调用基础 R 的函数或数据一样直接访问其功能:
births
## # A tibble: 6 x 2
## year births
## <int> <int>
## 1 2009 4130665
## 2 2010 3999386
## 3 2011 3953590
## 4 2012 3952841
## 5 2013 3932181
## 6 2014 3988076
您可能听说过 require() 函数:它也可以加载包,但如果包未安装,它不会抛出错误。
因此请谨慎使用该函数!
您可以在谢益辉的博文中阅读更多 library() 与 require() 的比较。若想学习 R 基础(包括包管理),请参阅我们的 R 学习指南。
package 与 library 有何区别?
谈到 library() 函数时,人们有时会把 package 和 library 混为一谈,甚至把包称为“库”。
请不要混淆:library() 是用于加载包的命令,同时也指包所在的位置,通常是您计算机上的某个文件夹;而 package 则是便于分发的函数集合。
来自 Hadley Wickham(Posit(原 RStudio)首席科学家、DataCamp 课程 Writing Functions in R 授课讲师)的一段话很贴切:
@ijlyttle a package is like a book, a library is like a library; you use library() to check a package out of the library #rsats
— Hadley Wickham (@hadleywickham) December 8, 2014
另一个区分方式是直接不带参数运行 library()。它会列出您计算机上不同 library(文件夹)中已安装的包:
library()
如何一次性加载多个 R 包
与 install.packages() 不同,library() 每次只能加载一个包。常见的变通做法是使用 lapply():
packages <- c("dplyr", "ggplot2", "tidyr")
lapply(packages, library, character.only = TRUE)
您也可以使用 pacman 包,它能一步完成缺失包的安装与加载,使用 p_load()。
如何卸载 R 包
要卸载指定包,您可以使用 detach() 函数。用法如下:
detach("package:babynames", unload = TRUE)
其他文档与求助渠道
如前文所述,DESCRIPTION 文件包含关于包的基本信息,但这些信息不足以指导您将其用于分析。此时您需要另外两类文档:帮助文件与小插曲(vignettes)。
帮助文件
与基础 R 相同,?() 和 help() 命令是初学某个包时的首要文档来源。您也许还记得,可以用 help(package = "packagename") 获取包的总体概览;而单个函数可用 help("函数名") 或在未加载包时用 help(function, package = "package") 查看,通常会包含函数描述、参数说明和示例。
例如,若要查看 vioplot 包中 vioplot 命令的帮助文件,可以输入:
help(vioplot, package = "vioplot")
提示:还可以用另一种方式查看已加载包中的内容。以如下方式使用 ls() 命令:
library(babynames)
ls("package:babynames")
## [1] "applicants" "babynames" "births" "lifetables"
小插曲(Vignettes)
大多数包还包含非常有用的 vignette 文档,作者会更详细地展示包的部分功能。跟着 vignette 操作是快速上手包常见用法的好方法,非常适合在您开始自己的分析前进行练习。
如您所记得,包所包含的 vignettes 信息也可在本地或在线的 DOCUMENTATION 文件中找到,但您也可以用 browseVignettes() 列出您已安装包的所有 vignettes;若要查看某个包的 vignettes,只需传入包名参数:browseVignettes(package="packagename")。两种情况下都会打开浏览器窗口,便于您探索并点击需要的 vignette。
如果您更倾向于命令行,vignette() 命令会显示所有 vignettes 的列表;使用 vignette(package = "packagename") 可查看某一包包含的 vignettes;定位到想要查看的文档后,使用 vignette("vignettename") 打开即可。
例如,ggplot2 是最受欢迎的可视化包之一。您可以在 DataCamp 的 Introduction to Data Visualization with ggplot2 课程中进一步学习。如果您尚未安装,这是一个安装并练习 install.packages() 的好机会。
假设您已安装 ggplot2,您可以查看其包含哪些 vignettes:
vignette(package = "ggplot2")
ggplot2 提供了两个 vignettes:“ggplot2-specs” 与 “extending-ggplot2”。您可以这样查看第一个:
vignette("ggplot2-specs")
在 RStudio 中,文档会显示在右侧的 Help 选项卡;而在 RGui 或命令行中,这将打开浏览器窗口。
在 R-Project 网站上,您还能找到更多获取 R 帮助的途径。
如何选择合适的 R 包
到这里,您应该已经能够安装并充分利用 R 包了,但仍有一个问题:到哪里去找您需要的包?
发现包的典型方式就是在学习 R 的过程中。在许多教程和课程中,常见的热门包都会被提及。比如,Cleaning Data in R 课程深入讲解了 tidyr。
基本上,您想在 R 中做的每个主题,通常都能找到相应的优质包。
但如果您有一个具体问题却不知从何入手呢?例如,正如本文开头所举的例子,若您想分析一些韩语文本?
或者您想采集一些天气数据?或者估算蒸散量?
您已经浏览过多个仓库,也知道可以查看 CRAN 包列表,但面对超过 21,000 个选项,很容易迷失方向。
让我们看看一些替代方案!
CRAN 任务视图
一种方法是通过CRAN 任务视图按类别浏览 CRAN 包。没错!作为官方仓库的 CRAN 也提供按主题浏览包的功能。任务视图本质上是基于功能将包分组的主题或类别。
如下所示,与遗传学相关的包都会被归入“Genetics(遗传学)”任务视图:
以韩语文本为例,您可以进入“Natural Language Processing(自然语言处理)”任务视图,在其中阅读介绍寻找可处理相应文本的包,或者简单使用 CTRL+F 输入关键词定位。
RDocumentation 与 R-Universe
RDocumentation 将来自 CRAN、Bioconductor 和 GitHub 的包文档聚合到一个可搜索界面中。它按下载热度排序结果,使常用包更容易被优先看到。
R-Universe 是较新的替代方案,提供包含构建状态、文档和依赖信息的包页面。二者都免费,值得收藏。
结语
R 包是 R 生态的支柱。无论您从 CRAN、Bioconductor 还是 GitHub 安装,核心流程都相同:使用 install.packages() 或 BiocManager::install() 安装一次,然后在每个会话中用 library() 加载。
本文未涉及如何创建您自己的包。如果这是您的下一步,Hadley Wickham 的 R Packages 一书是权威参考,DataCamp 的 Developing R Packages 课程也会带您动手实践整个流程。
如果您希望更全面地夯实 R 基础,我建议从 Introduction to R 课程开始,或浏览完整的 R 课程目录。
R 是统计与数据科学领域使用最广泛的编程语言之一,而其强大之处很大程度来自于包。无论您需要进行自然语言处理、从网络获取天气数据,还是运行复杂的统计模型,几乎都能找到相应的包。截止 2026 年,官方仓库(CRAN)已托管超过 21,000 个包,互联网上还公开提供了更多包。
如果您刚开始使用 R,我将带您了解 R 包的基础及其用法。我们将涵盖以下内容: