无痛的方式来安装新版本的R?

Andrew Gelman最近感叹缺乏一个简单的R升级过程 (可能在Windows上比Linux更相关)。 有没有人有做好升级的好方法,从安装软件到复制所有设置/软件包?

这个build议包含在评论中,是我最近使用的。 首先安装新版本,然后在旧版本中运行:

#--run in the old version of R setwd("C:/Temp/") packages <- installed.packages()[,"Package"] save(packages, file="Rpackages") 

随后在新版本中:

 #--run in the new version setwd("C:/Temp/") load("Rpackages") for (p in setdiff(packages, installed.packages()[,"Package"])) install.packages(p) 

只是为了完整性,有一些方法可以防止你遇到这个问题。 正如德克所说,保存你的软件包在另一个目录在你的电脑上。

 install.packages("thepackage",lib="/path/to/directory/with/libraries") 

您可以使用函数.libPaths更改默认的.libPaths

 .libPaths("/path/to/directory/with/libraries") 

这将把这个path作为.Libraryvariables的第一个值,并将它作为默认值。

如果你想进一步自动化,你可以在Rprofile.site文件中指定它,你可以在你的R版本的/ etc /目录下find它。 然后它会在每次R加载时自动加载,而且您不必再为此担心。 您可以从指定的目录安装和加载软件包。

最后,我在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]) } 

我通过在我的Rprofile.site中指定.Last()来制作packagelist.RData。 这更新了软件包列表,如果我安装了一些:

 .Last <- function(){ pkgs <- installed.packages()[,1] if (length(pkgs) > length(installed)){ save(pkgs,file="G:\Setinfo\R\packagelist.RData") } } 

当我安装一个新的R版本时,我只是将必要的元素添加到Rprofile.site文件,并重新安装所有包。 无论如何,我必须调整Rprofile.site(使用总和对比,为Tinn-R添加额外的代码,这些东西),所以这不是额外的工作。 重新安装所有软件包需要额外的时间。

最后一点与原始问题中的解答相同。 我只是不需要担心首先获得“安装”列表。

同样,如果你的软件包不是从CRAN安装的,那么这种方法并不完美。 但是这个代码很容易扩展到包含这些代码。

编辑:代码中有一个缺less的括号

这当然是一个老问题,但是我可以find一个新的简单答案。

 install.packages("installr") require(installr) updateR() 

做这个最好的方法是从RGUI系统。 所有的包将被转移到新的文件夹,旧的将被删除或保存(你可以select)。 然后,一旦您再次打开RStudio,它会立即识别出您正在使用更新的版本。 对我来说,这就像一个魅力,

更多关于{installr}的信息 。

西蒙

两个简单的build议:

  1. 使用Gabor的batch file ,据说这些文件包含了帮助这个批量库重定位的工具。 警告:我没有用过它们。

  2. 不要在安装的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" 

上面build议的方法不能完全工作,如果你有不是来自CRAN的包。 例如,从非CRAN网站下载的个人软件包或软件包。

我在Windows上的首选方法(升级2.10.1至2.11.0):

  1. 安装R-2.11.0
  2. R-2.10.0/library/*复制到R-2.11.0/library/
  3. 回答“否”,提示您是否可以覆盖。
  4. 启动R 2.11.0
  5. 运行R命令update.packages()

就问题中给出的解决scheme而言,如果您已经安装了新版本,运行旧版本的R可能并不容易。 在这种情况下,您仍然可以按照以下方式重新安装以前R版本的所有缺less的软件包。

 # 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) } } 

(请注意,第一行代码中的list.files()参数应该是前一个R版本的库目录的path,其中前一版本中的所有软件包都是。在我目前的情况下,这是"/Library/Frameworks/R.framework/Versions/3.2/Resources/library"如果你之前的R版本不是3.2,或者你在Windows上,这将是不同的。)

if语句确保程序包安装

  • 它已经安装在新的R版本中,或者
  • 已经作为for循环的先前迭代中安装的程序包的依赖项安装。

遵循德克的build议,这里是一些R代码在Windows上做到这一点: 如何在Windows XP上轻松升级R.

更新(15.04.11):我写了一篇关于这个主题的文章,解释了如何处理在Windows 7上升级R的常见问题

两个选项:

  1. 在这里实现我的答案
  2. 如果你在Eclipse下使用R和StatET,打开Run Configurations ,点击Console选项卡,然后在启动后的R snippet运行框中添加下面这行代码.libPaths("C:/R/library")

我在Windows 8上,出于一些奇怪的原因,我不能使用我的互联网连接安装软件包。

我通常使用CRAN的.zip文件进行安装。

从R 3.2.5到R 3.3.1之后。

我只是简单的复制软件包

C:\Path\to\packa\R\win-library\3.2C:\Path\to\packa\R\win-library\3.3

然后我重新启动了R会话。 完美的工作。 我没有检查是否所有的软件包运行良好。 但是,我检查的工作非常好。 希望这个黑客适用于每个人。

干杯。

如果你有先见之明,接受的答案可能会奏效,但我已经摆脱了旧版本,所以无法遵循这些方向。 下面描述的步骤适用于从2.1和3.1的OSX升级。

更新:要获得您的上一个版本的目录(而不是键入3.1或3.2),您可以使用下面的命令。 第二个直接转换为Rvariables,跳过..DS_Store ,使用:

 OLD=$(ls -d /Library/Frameworks/R.framework/Versions/*.* |tail -n 2 | head -n 1)Resources/library/ echo "packages = c(\"`ls $OLD | tail +4| paste -s -d ',' - | sed -E 's|,|\",\"|'g`\")" | tr -d "/" 

然后在R中你可以粘贴生成的variables(添加|pbcopy到最后直接复制它,一旦在R的新版本中定义了,你可以从上面的指令中循环安装的软件包…

 for (p in setdiff(packages, installed.packages()[,"Package"])) install.packages(p, dependencies=TRUE, quiet=TRUE, ask=FALSE) 

对我来说这个页面是不错的https://www.r-statistics.com/2013/03/updating-r-from-r-on-windows-using-the-installr-package/或者另一个选项就是安装新的选项,并在最后你把,例如在我的电脑在Windows中;

.libPaths(c(“D:/Documents/R/win-library/3.2”,“C:/ Program Files / R / R-3.2.3 / library”,“C:/ Program Files / R / R-3.2 .0 / library“,”D:/Documents/R/win-library/2.15“)

在我的情况下,最后一个版本的每一个path,我总是把第一个path是“D:/Documents/R/win-library/3.2”是固定的,然后我把另一个,因为你不需要复制或移动任何包,在我的sugest只是叫它