从一台linux服务器复制旧的R软件包并将其安装在新服务器上

时间:2019-05-15 16:09:18

标签: r linux unix

我正在尝试从一个Linux服务器上的目录复制R软件包,然后将它们安装在另一台Linux服务器上。我首先编写了一个脚本,该脚本将遍历我需要的所有R软件包的列表并进行安装。这适用于大多数软件包,但由于我被迫使用R 3.0.3,因此该版本的R无法使用大量软件包。这意味着R试图安装这些特定软件包的最新版本。

我试图找到一种解决方案,该解决方案不需要我浏览每个软件包,找到我们在旧服务器上运行的版本,然后转到CRAN并下载已存档的.tar.gz文件。

理想情况下,我想遍历R软件包的目录,将它们全部放入.tar.gz文件,将这些文件移动到新服务器,然后像这样安装它们。但是,当我尝试“构建”其中一个软件包时遇到了以下问题。

R CMD build car

Read 1 item
* checking for file ‘car/DESCRIPTION’ ... OK
* preparing ‘car’:
* checking DESCRIPTION meta-information ... OK
Warning in file(con, "r") :
  cannot open file 'man': No such file or directory
Error in file(con, "r") : cannot open the connection
 ERROR
computing Rd index failed

我使用devtools::build('abind')尝试了另一种方法,但这也由于上面的相同错误而失败。

我应该改变方法还是我的工作中缺少某些东西?任何帮助,将不胜感激。

1 个答案:

答案 0 :(得分:1)

您的常规方法不起作用:tar.gz文件包含软件包的源,但是在安装软件包时并未安装所有软件包,因此无法重新创建tar.gz文件从已安装的文件中。

如果您不想使用如此古老的R,可能会起作用的是使用Microsoft的CRAN“时间机器”(https://mran.microsoft.com/timemachine),但我认为它只能追溯到R 3.2.3。

复制库可能会起作用,但是这些文件的二进制文件可能已链接到特定位置的系统库文件,因此我不相信它是可靠的。

我认为您最好的选择是将R更新到当前版本(或者可能是前一个系列的最后一个补丁程序3.5.3),然后仅安装所需版本的软件包。

如果由于某种原因这不可能,那么您可能别无选择,只能安装与已安装的版本匹配的版本。至少您可以自动找到版本:installed.packages()函数返回一个矩阵,该矩阵的包名称在"Package"列中,而其版本在"Version"列中。在旧系统上运行该代码,然后使用remotes::install_version()函数在新系统上构建它们(该函数声称可以在R回到3.0.0上运行,但是我敢肯定它尚未在此处进行测试)。