为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

冉冉说 2019-08-23 15:34:28
无痛的方式来安装新版本的R?有没有人有一个很好的技巧来进行升级,从安装软件到复制所有设置/包?这个建议包含在评论中,是我最近一直在使用的。首先安装新版本,然后在旧版本中运行:#--run in the old version of Rsetwd("C:/Temp/")packages <- installed.packages()[,"Package"]save(packages, file="Rpackages")在新版本中遵循以下内容:#--run in the new versionsetwd("C:/Temp/")load("Rpackages")for (p in setdiff(packages, installed.packages()[,"Package"]))install.packages(p)
查看完整描述

3 回答

?
慕沐林林

TA贡献2016条经验 获得超9个赞

为了完整起见,有一些方法可以防止您遇到此问题。正如Dirk所说,将包保存在计算机上的另一个目录中。

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

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

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

这会将此路径作为.Library变量中的第一个值,并使其成为默认值。

如果要进一步自动化,可以在Rprofile.site文件中指定它,您可以在R build的/ etc /目录中找到它。然后每次加载时它都会自动加载,你不必再担心了。您只需从指定目录安装和加载包即可。

最后,我的Rprofile.site中包含一些小代码,允许我在安装新R版本时重新安装所有软件包。您只需更新到新R版本之前列出它们。我使用包含所有包的更新列表的.RData文件。

library(utils)## Check necessary packagesload("G:\Setinfo\R\packagelist.RData") # includes a vector "pkgs"installed <- pkgs %in% installed.packages()[, 'Package']if (length(pkgs[!installed]) >=1){
  install.packages(pkgs[!installed])}

我通过.Last()在我的Rprofile.site中指定来创建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安装,则无法完美运行。但是这个代码很容易扩展,包括那些代码。


查看完整回答
反对 回复 2019-08-23
?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

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

更新:要获取最新版本的目录(而不是键入3.1或3.2),您可以使用以下命令。第二个直接转换为R变量,跳过.和,...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 "/"

(添加|pbcopy到最后将其直接复制到Mac剪贴板)

然后在R中,您可以粘贴生成的变量。一旦在新版本的R中定义了它,您就可以按照上面的说明遍历已安装的软件包......

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


查看完整回答
反对 回复 2019-08-23
  • 3 回答
  • 0 关注
  • 702 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信