升级完R后如何快速安装所有安装过的包

R3.0已经发布了。很多人在升级前最担心的是安装了很多包,每次大版本升级都需要一个一个全新安装一遍,很是折磨人啊。

如果你在安装升级之前就看到这里,那么你可以按照如下操作完成自动安装所有安装过的包:
首先在旧版本下运行

##-run in the old version of R 
setwd("path/to/save/the/package/list/") 
olib <- installed.packages()[,"Package"] 
save(olib, file="oldRpackages")

这一步是为了把所有的包都保存下来。然后在安装了新版本后运行

##-run in the new version of R
setwd("path/to/saved/the/package/list/")
load("oldRpackages")
source("http://bioconductor.org/biocLite.R")
tobeinstalled <- setdiff(olib, installed.packages()[,"Package"])
biocLite(tobeinstalled)

基本上只需要注意一下报错的那些包就可以了,因为并不是所有的包都会正确先级的。

如果你在安装之后再看到这里,你可以首先找到library的安装目录

> .libPaths()
[1] "/Library/Frameworks/R.framework/Versions/3.0/Resources/library"

可以知道,R 3.0的包都安装在3.0/Resources/library下面。那么其它的R版本的包都会安装在哪里呢?我们可以去/Library/Frameworks/R.framework/Versions/目录下看一看,就会看到诸如
2.12/ 2.13/ 2.14/ 2.15/ 3.0/ Current/
这些目录了。你找到之前版本的目录,然后找到它的library目录,比如
/Library/Frameworks/R.framework/Versions/2.15/Resources/library
然后将其目录下的所有文件list出来,使用ls或者dir命令即可。
假设我们得到了类似这样的列表:

KernSmooth	base		cluster		datasets	graphics	methods		nnet		spatial		stats4		tools
MASS		boot		codetools	foreign		grid		mgcv		parallel	splines		survival	translations
Matrix		class		compiler	grDevices	lattice		nlme		rpart		stats		tcltk		utils

你使用copy的方式把这些文本拷贝下来,进行新版本的R,运行命令:

olib <- "KernSmooth	base		cluster		datasets	graphics	methods		nnet		spatial		stats4		tools
MASS		boot		codetools	foreign		grid		mgcv		parallel	splines		survival	translations
Matrix		class		compiler	grDevices	lattice		nlme		rpart		stats		tcltk		utils
"  ##把文本粘贴到这里
 
olib <- unlist(strsplit(olib, "\\s+"))
source("http://bioconductor.org/biocLite.R")
tobeinstalled <- setdiff(olib, installed.packages()[,"Package"])
biocLite(tobeinstalled)

然后就等待着安装结合吧。

2 thoughts on “升级完R后如何快速安装所有安装过的包

  1. 如果我只是将之前的 package 从之前的目录(例如R/R-3.1.1/library)下全选,然后拷贝到新升级的目录(例如R/R-3.1.2/library)下,然后忽略那些重复的 package?我认为这些重复的 package 是新升级版本的,不应该改动。不知道我这样做会忽略什么或者博主的方法有更优势的地方?谢谢

    1. 如果你是从3.1.1至3.1.2当然没有问题。但是如果你是从1.5.X升级至3.1.X那最好还是按照我的办法来。

发表评论

电子邮件地址不会被公开。 必填项已用*标注