Sha*_*ane 151 packages r upgrade
安德鲁·格尔曼(Andrew Gelman)最近对R缺乏一个简单的升级过程感到遗憾(可能在Windows上比Linux更相关).有没有人有一个很好的技巧来进行升级,从安装软件到复制所有设置/包?
这个建议包含在评论中,是我最近一直在使用的.首先安装新版本,然后在旧版本中运行:
#--run in the old version of R
setwd("C:/Temp/")
packages <- installed.packages()[,"Package"]
save(packages, file="Rpackages")
Run Code Online (Sandbox Code Playgroud)
在新版本中遵循以下内容:
#--run in the new version
setwd("C:/Temp/")
load("Rpackages")
for (p in setdiff(packages, installed.packages()[,"Package"]))
install.packages(p)
Run Code Online (Sandbox Code Playgroud)
Jor*_*eys 72
为了完整起见,有一些方法可以防止您遇到此问题.正如Dirk所说,将包保存在计算机上的另一个目录中.
install.packages("thepackage",lib="/path/to/directory/with/libraries")
Run Code Online (Sandbox Code Playgroud)
您可以更改默认.Library使用的函数值.libPaths太
.libPaths("/path/to/directory/with/libraries")
Run Code Online (Sandbox Code Playgroud)
这会将此路径作为.Library变量中的第一个值,并使其成为默认值.
如果要进一步自动化,可以在Rprofile.site文件中指定它,您可以在R build的/ etc /目录中找到它.然后每次加载时它都会自动加载,你不必再担心了.您只需从指定目录安装和加载包即可.
最后,我的Rprofile.site中包含一些小代码,允许我在安装新R版本时重新安装所有软件包.您只需在更新到新R版本之前列出它们.我使用包含所有包的更新列表的.RData文件.
library(utils)
## Check necessary packages
load("G:\Setinfo\R\packagelist.RData") # includes a vector "pkgs"
installed <- pkgs %in% installed.packages()[, 'Package']
if (length(pkgs[!installed]) >=1){
install.packages(pkgs[!installed])
}
Run Code Online (Sandbox Code Playgroud)
我通过.Last()在我的Rprofile.site中指定来创建packagelist.RData .如果我安装了一些,则更新包列表:
.Last <- function(){
pkgs <- installed.packages()[,1]
if (length(pkgs) > length(installed)){
save(pkgs,file="G:\Setinfo\R\packagelist.RData")
}
}
Run Code Online (Sandbox Code Playgroud)
当我安装新的R版本时,我只需将必要的元素添加到Rprofile.site文件中,然后重新安装所有软件包.无论如何我必须调整Rprofile.site(使用总和对比,添加Tinn-R的额外代码,这些东西),所以这不是真正的额外工作.它只需要额外的时间来重新安装所有包.
最后一位等同于原始问题中给出的解决方案.我不需要担心首先获得"已安装"列表.
同样,如果您的软件包未从CRAN安装,则无法完美运行.但是这个代码很容易扩展,包括那些代码.
编辑:代码中缺少括号
SJD*_*JDS 38
这当然是一个老问题,但我可能会找到一个新的简单答案(仅适用于Windows).
install.packages("installr")
require(installr)
updateR()
Run Code Online (Sandbox Code Playgroud)
最好的方法是使用RGui系统.您的所有包都将被转移到新文件夹,旧文件夹将被删除或保存(您也可以选择).然后,再次打开RStudio后,它会立即识别出您使用的是更新版本.对我来说,这就像一个魅力,
西蒙
Dir*_*tel 27
两个快速建议:
使用Gabor的批处理文件,据说这些文件包含有助于例如批量库重定位的工具.警告:我没有用过它们.
不要在已安装的R版本的"filetree"中安装库.在Windows上,我可以将R放入C:/ opt/R/R- $版本,但是使用以下代码段将所有库放入C:/ opt/R/library /,因为它首先缓解了问题:
$ cat .Renviron # this is using MSys/MinGW which looks like Cygwin
## Example .Renviron on Windows
R_LIBS="C:/opt/R/library"
Run Code Online (Sandbox Code Playgroud)
Kev*_*ght 24
如果您的软件包不是来自CRAN,则上面建议的方法将无法完全发挥作用.例如,从非CRAN站点下载的个人包或包.
我在Windows上的首选方法(将2.10.1升级到2.11.0):
R-2.10.0/library/*到R-2.11.0/library/update.packages()小智 7
关于问题中给出的解决方案,如果您已经安装了新版本,则运行旧版本的R可能并不容易.在这种情况下,您仍然可以从以前的R版本重新安装所有缺少的软件包,如下所示.
# Get names of packages in previous R version
old.packages <- list.files("/Library/Frameworks/R.framework/Versions/3.2/Resources/library")
# Install packages in the previous version.
# For each package p in previous version...
for (p in old.packages) {
# ... Only if p is not already installed
if (!(p %in% installed.packages()[,"Package"])) {
# Install p
install.packages(p)
}
}
Run Code Online (Sandbox Code Playgroud)
(请注意,list.files()第一行代码中的参数应该是前一个R版本的库目录的路径,其中前一版本中的所有包文件夹都是.在我目前的情况下,这是"/Library/Frameworks/R.framework/Versions/3.2/Resources/library".如果您之前的R版本不是3.2,或者如果您使用的是Windows.)
该if语句确保如果没有安装包
for循环迭代中安装的软件包中.| 归档时间: |
|
| 查看次数: |
54582 次 |
| 最近记录: |