Rstudio/R的包(package)管理是个老生常谈的问题,很少有人去总结,因为大家都认为比较简单。今天我就把所有的安装和管理R包的方法一起写一写。
一、包在哪里?
CRAN
官方包CRAN,通常国内选择镜像,方法自行百度。
Bioconductor
Bioconductor,这个通常只有生物信息学的人才用得到。
Github
Github,不用多说,一般不太稳定,但是想尝鲜可以的。大部分CRAN和Bioconductor都是托管在Github上的。
二、自带安装方法(CRAN)
Install Packages from Repositories or Local Files
e.g.
install.packages("tidyverse")
必须要加引号。该命令默认安装的都是CRAN上的包
默认的包管理,其实完全可以不用命令,因为Rstudio已经给大家带了界面,完全可以点击几下就安装、删除、升级等操作,非常方便。
如果你还是觉得命令行才够装逼,那就用这个命令好了。不过这个命令,还有很多细节,
比如,默认情况下你输入包名,比如说"tidyverse", 会自动从CRAN上检索对应的包,然后进行下载。如果你希望指定安装本地包,或者一个具体的网络地址,参考代码如下:
# from url resource
install.packages("https://mirrors.tuna.tsinghua.edu.cn/CRAN/bin/windows/contrib/3.5/Matrix_1.2-15.zip", repos=NULL)
# from local
install.packages("~/../Desktop/Matrix_1.2-15.zip", repos = NULL)
一次安装多个包
# multiple install
install.packages(c("slidify", "tidyverse", "devtools") )
大家还可以参考这篇文章R包安装函数"install.packages"函数详解
help
更多详细操作,请用help
# help
?install.packages()
# OR
help(package = "package")
查看已安装的R包(这个貌似没什么用):installed.packages()
查看某个包的具体描述:packageDescription("tidyverse")
Vignette
Vignette,这个中文意思大概就是使用场景展示,我觉得比help更有用,因为通常都是开发者用实例说明,对于一个包的上手,特别有用。Vignette的方法有两种:
弹出网页浏览
browseVignettes(package="tidyverse")
在命令行浏览
这个方法并不推荐,因为要分2步
-
先浏览一下这个package里面到底有几个Vignettes
vignette(package = "rvest")
这时候会弹出一个页面,在里面显示这个包到底有几个Vignettes
-
继续运行命令,找到你想浏览的那个
vignette("harvesting-the-web ")
,在右侧help面板就会弹出Vignette。
How To Update, Remove And Check Installed Packages
#You can check what packages need an update with a call to the function:
old.packages()
#You can update all packages by using:
update.packages()
# Remove the packages
remove.packages("vioplot")
三、Bioconductor
是的!为了Bioconductor的包安装,Bioconductor单独做了一个用来安装的包程序。在R 3.5版本以前还有个方法,但现在R已经4.0了,不再推荐以前的方法。详见
https://www.jianshu.com/p/8e0dece51757
https://bioconductor.org/install/
现在的方法很简单,首先安装BiocManager包,然后就可以通过BiocManager下面的install命令来安装了。
install.packages("BiocManager")
BiocManager::install("GEOquery")
这里我特意解释一下::在R里面的究竟如何使用,是干什么用的。因为我们后面还会出现。
我们知道,在R中,要想使用某个包下的命令,必须先加载(library),否则系统会提示无该命令(function)。但我们有时候只用一下这个包的命令,没必要还先去加载它,因为加载的包越多,系统负担越重,越慢。所以,就有了::,它让我们不必加载这个包,就可以用它里面的命令。比如
BiocManager::install("GEOquery")
意思是用BiocManager抱里面的install命令来安装这个包。
四、devtools
devtools是个全能型选手,你几乎可以安装任何源头的包,首先是安装它install.packages("devtools")
。在windows系统里,使用devtools必须先安装R配套的一个工具,叫做 Rtools on Windows,很多包都依赖这个工具,所以建议直接安装。并且要加入到你的环境变量,默认它在安装的时候会加入。不懂请百度“环境变量”。
下面就是这位全能型选手的命令:
-
install_bioc()
from Bioconductor, -
install_bitbucket()
from Bitbucket, -
install_cran()
from CRAN, -
install_git()
from a git repository, -
install_github()
from GitHub, -
install_local()
from a local file, -
install_svn()
from a SVN repository, -
install_url()
from a URL, and -
install_version()
from a specific version of a CRAN package.
当然一般要在前面加 devtools::
if (!require(devtools)) install.packages("devtools")
devtools::install_github("boxuancui/DataExplorer")
更详细的说明请见help文件或vignette
五、 remotes
remotes包与devtools基本相同,用法也基本相同,官方是这样定义它的:
This package is a lightweight replacement of the install_*
functions in devtools
. Indeed most of the code was copied over from devtools
.
所以,我们强烈推荐用remotes取代devtools,因为它更轻,更小,更好用!而且支持所有的安装源,包括bioconductor
这里我就直接copy remotes的readme文件了。
Currently supported remote types
- GitHub repositories via
install_github
.
remotes::install_github("gaborcsardi/[email protected]")
- Bitbucket repositories via
install_bitbucket
. - Generic git repositories via
install_git
. They need either a system git installation, or the git2r R package. - Local directories or package archive files via
install_local
. - Remote package archive files via
install_url
. - Packages in subversion repositories via
install_svn
. They need a system subversion installation. - Specific package versions from CRAN or other CRAN-like repositories via
install_version
. This includes outdated and archived packages as well. - All dependencies of a package in a local directory via
install_deps
.
Usage
# GitLab
Remotes: gitlab::jimhester/covr
# Git
Remotes: git::[email protected]:djnavarro/lsr.git
# Bitbucket
Remotes: bitbucket::sulab/mygene.r@default, djnavarro/lsr
# Bioconductor
Remotes: bioc::3.3/SummarizedExperiment#117513, bioc::release/Biobase
# SVN
Remotes: svn::https://github.com/tidyverse/stringr
# URL
Remotes: url::https://github.com/tidyverse/stringr/archive/HEAD.zip
# Local
Remotes: local::/pkgs/testthat
六、pacman
这个包,才是我们今天的王者,作者是Tyler Rinker,一位能与Hadley Wickham平起平坐大牛。pacman与另外一个包管理工具同名,在Linux 的Arch包管理和Manjaro都是用的pacman管理包。二者都叫pacman,但应该是不同的。
pacman之所好,是因为它简单,不需要那讨厌的“”
,很多是连贯操作,而且命令也很短。而且它囊括了前面所有安装包的功能。
pacman依赖devtools,在使用前请安装并library
下面是一些常见的参考命令。
Installing, Loading, Unloading, Updating, & Deleting Packages with pacman
Quick Reference Table
pacman Function | Base Equivalent | Description |
---|---|---|
p_load |
install.packages + library |
Load and Install Packages |
p_install |
install.packages |
Install Packages from CRAN |
p_load_gh |
NONE | Load and Install GitHub Packages |
p_install_gh |
NONE | Install Packages from GitHub |
p_install_version |
install.packages & packageVersion |
Install Minimum Version of Packages |
p_temp |
NONE | Install a Package Temporarily |
p_unload |
detach |
Unload Packages from the Search Path |
p_update |
update.packages |
Update Out-of-Date Packages |
一个命令,包含安装和加载,十分简单。p_load也是这里面最常用的命令
pacman::p_load(XML, devtools, RCurl, fakePackage, SPSSemulate)
除此之外,对上面的命令甚至还有很多简写,一样执行
Functions for installing, loading, unloading, updating, & deleting packages
- p_load
Load One or More Packages - p_install | p_get
Installs & Loads Packages - p_load_gh
Load One or More GitHub Packages - p_install_gh
Installs & Loads GitHub Packages - p_install_version
Install Minimal Package Version - p_temp
Install a Package Temporarily - p_unload
Unloads package(s) - p_update | p_up
Update Out-of-Date Packages - p_delete | p_del
Permanently Remove Package Removal(s) From Library
更多的功能,请去官方探索吧。Love pacman
如何更优雅
似乎我们该在安装前给一个判断,这个包事先有没有,如果有那就不要重复安装
if (!require("pacman")) install.packages("pacman")
pacman::p_load(package1, package2, package_n)