首页 文章

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

提问于
浏览
142

Andrew Gelman recently lamented the lack of an easy upgrade process for R(在Windows上可能比Linux更相关) . 有没有人有一个很好的技巧来进行升级,从安装软件到复制所有设置/包?

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

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

10 回答

  • 1

    我在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

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

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

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

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

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

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

    最后,我的Rprofile.site中包含一些小代码,允许我在安装新R版本时重新安装所有软件包 . 您只需将它们列出 before 即可更新到新的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安装,则无法完美运行 . 但是这个代码很容易扩展,包括那些代码 .

    编辑:代码中缺少括号

  • 1

    这当然是一个老问题,但我可能会找到一个新的简单答案(仅适用于Windows) .

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

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

    More info on here .

    西蒙

  • 67

    两个快速建议:

    • 使用Gabor的batchfiles据说包含有助于例如帮助的工具 . 这个批量库重定位 . 警告:我没有用过它们 .

    • 不要在已安装的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"
    
  • 3

    如果您的软件包不是来自CRAN,则上面建议的方法将无法完全发挥作用 . 例如,从非CRAN站点下载的个人包或包 .

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

    • 安装R-2.11.0

    • 复制 R-2.10.0/library/*R-2.11.0/library/

    • 回答"no"提示您是否可以覆盖 .

    • 开始R 2.11.0

    • 运行R命令 update.packages()

  • 26

    关于问题中给出的解决方案,如果您已经安装了新版本,则运行旧版本的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) 
          }
        }
    

    (请注意,第一行代码中 list.files() 的参数应该是前一个R版本的库目录的路径,其中前一版本中的所有包文件夹都是 . 在我目前的情况下,这是 "/Library/Frameworks/R.framework/Versions/3.2/Resources/library" . 这将是如果您以前的R版本不是3.2,或者如果您使用的是Windows,则会有所不同 . )

    if 语句确保如果未安装包

    • 它已经安装在新的R版本中,或者

    • 已作为依赖关系安装在 for 循环的上一次迭代中安装的软件包中 .

  • 22

    继德克之后建议,这里有一些R代码在windows上执行:How to easily upgrade R on windows XP

    更新(15.04.11):我写了另一篇关于这个主题的文章,解释了如何处理upgrading R on windows 7的常见问题

  • 6

    两种选择:

    • 实施我的回答here

    • 如果您在Eclipse下使用R和StatET,请打开运行配置,单击控制台选项卡,然后在启动后在名为R snippet run的框中添加此行以及您选择的目录: .libPaths("C:/R/library")

  • 0

    如果你有先见之明,接受的答案可能会有效,但我已经摆脱了旧版本,因此无法遵循这些指示 . 下面描述的步骤适用于从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)
    
  • 34

    对我来说这个页面很好https://www.r-statistics.com/2013/03/updating-r-from-r-on-windows-using-the-installr-package/或者其他选项只是安装新的选项,最后你放,例如在我的电脑的窗口

    .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“)

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

相关问题