安装新版本R的无痛方法?

安装新版本R的无痛方法?,r,upgrade,packages,R,Upgrade,Packages,(在Windows上可能比Linux更相关)。从安装软件到复制所有设置/软件包,有人有好的升级技巧吗 这个建议包含在评论中,这是我最近一直在使用的。首先安装新版本,然后在旧版本中运行: #--run in the old version of R setwd("C:/Temp/") packages <- installed.packages()[,"Package"] save(packages, file="Rpackages") 两个快速建议: 使用Gabor工具,据说这些工具包括

(在Windows上可能比Linux更相关)。从安装软件到复制所有设置/软件包,有人有好的升级技巧吗

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

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

  • 使用Gabor工具,据说这些工具包括有助于批量库重新定位的工具。警告:我没有用过

  • 不要在已安装的R版本的“文件树”中安装库。在Windows上,我可以将R放入C:/opt/R/R-$version,但使用以下代码片段将所有库放入C:/opt/R/library/中,因为它首先可以缓解问题:


  • 如果您的软件包不是来自CRAN,则上述建议的方法将不会完全起作用。例如,个人软件包或从非CRAN站点下载的软件包

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

  • 安装R-2.11.0
  • R-2.10.0/library/*
    复制到
    R-2.11.0/library/
  • 如果提示您是否可以覆盖,请回答“否”
  • 启动R2.11.0
  • 运行R命令
    update.packages()

  • 按照Dirk的建议,下面是一些在windows上执行此操作的R代码:


    更新(15.04.11):我写了另一篇关于这个主题的文章,解释了如何处理常见的问题。为了完整起见,有一些方法可以防止你出现这个问题。正如德克所说,将您的包保存在计算机上的另一个目录中

    install.packages("thepackage",lib="/path/to/directory/with/libraries")
    
    也可以使用函数
    .libpath
    更改默认的
    .Library

    .libPaths("/path/to/directory/with/libraries")
    
    这将把此路径作为
    .Library
    变量的第一个值,并将其设为默认值

    如果希望进一步自动化此操作,可以在Rprofile.site文件中指定此操作,该文件位于R构建的/etc/目录中。然后每次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])
    }
    
    当我安装新的R版本时,我只需将必要的元素添加到Rprofile.site文件中,所有软件包都会重新安装。无论如何,我必须调整Rprofile.site(使用总和对比,为Tinn-R添加额外的代码,诸如此类),所以这不是真正的额外工作。重新安装所有软件包需要额外的时间

    这最后一点相当于原始问题中给出的解决方案。我只是不需要担心先得到“已安装”列表

    同样,如果您的软件包不是从CRAN安装的,那么这也不是完美的。但此代码也可以轻松扩展以包括这些代码。

    两个选项:

  • 实现我的答案
  • 如果在Eclipse和StatET下使用R,请打开运行配置,单击Console选项卡,并在名为R snippet启动后运行的框中添加这一行,并选择目录:
    .libpath(“C:/R/library”)

  • 如果你有远见的话,这个被接受的答案可能会奏效,但我已经摆脱了旧版本,所以无法遵循这些方向。 下面描述的步骤适用于从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)
    

    如果您使用的是Windows,则可能需要使用installr软件包:

    install.packages(“installr”)
    需要(安装程序)
    更新程序()
    
    最好的方法是使用RGui系统。您的所有软件包将被转移到新文件夹,旧的软件包将被删除或保存(您可以选择其中一个)。 然后,一旦再次打开RStudio,它会立即识别出您正在使用更新的版本。对我来说,这很有魅力

    .

    对我来说,这一页很好 或 另一个选择是只安装新的选项,并在最后你把,例如在windows在我的电脑

    .1(c)( “D:/Documents/R/win library/3.2”, “C:/程序文件/R/R-3.2.3/库”, “C:/程序文件/R/R-3.2.0/库”, “D:/Documents/R/win library/2.15” )

    最后一个版本的每个路径在我的例子中,我总是把第一个路径放在“D:/Documents/R/win library/3.2”中,这是固定的
    然后我放了另一个,因为您不需要复制或移动任何软件包,在我的建议中称之为

    关于问题中给出的解决方案,如果您已经安装了新版本,那么运行旧版本的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) 
          }
        }
    
    #获取以前R版本中的包名称
    
    old.packages我在Windows 8上,出于某种奇怪的原因,我无法使用我的internet连接安装软件包

    我通常使用CRAN中的.zip文件安装它

    在我从R3.2.5升级到R3.3.1之后

    我只是简单地复制了

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

    然后我重新启动了R会话。工作得很好。 我还没见过他
    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 "/" 
    
    for (p in setdiff(packages, installed.packages()[,"Package"]))
       install.packages(p, dependencies=TRUE, quiet=TRUE, ask=FALSE)
    
    # 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) 
          }
        }
    
    sudo apt update && sudo apt --yes full-upgrade
    sudo apt install --yes libappstream4 curl
    ### ov1 = online version; lv1 = local version (i.e. currently installed)
    ov1=$(curl --silent --url https://packages.debian.org/sid/r-base |
        grep 'meta name=\"Keywords\"' |
        grep --only-matching '[0-9].*[0-9]') ; echo $ov1
    ## command -v = print a description of COMMAND similar to the `type' builtin
    ## && = if prior command succeeds, then do; || = if prior fails, then do
    command -v 'R --version' &&
        lv1=$(R --version |
                  grep --only-matching '[0-9\.]*[0-9]' |
                  ## || = otherwise
                  head -1) ||
            lv1=0
    ## 'lt' = less than
    if dpkg --compare-versions "$lv1" 'lt' "$ov1" 
    then ## declare -a = indexed array
         declare -a deb1=('r-base' 'r-base-dev' 'r-recommended')
         for i in "${deb1[@]}"
         do sudo apt install --yes "$i"
         done
    fi
    ### certain Debian packages are required by 'R' so best have these first
    sudo apt install --yes ccache libcairo2-dev libxml2-dev libcurl4-openssl-dev \
         libssl-dev liblapack-dev libssl-dev
    declare -a pkg1=('data.table' 'ggplot2' 'knitr' 'devtools' 'roxygen2')
    ## installing as 'root' so these are installed in
    Rscript -e ".libPaths()[1]"
    for i in "${pkg1[@]}"
    do sudo Rscript -e "install.packages('$i', dependencies=TRUE)"
    done
    ### other useful additions
    sudo apt install --yes libblas-dev libboost-dev libarmadillo-dev \
         jags pandoc pandoc-citeproc 
    sudo apt update && sudo apt full-upgrade
    
    install.packages("ropenblas")
    ropenblas::rcompiler()