迁移R库

Ite*_*tor 27 installation administration r r-faq

我想在Linux上将几个R库(*)从一个驱动器移动到另一个驱动器,并且想知道一个简单的移动是否可行且安全,或者我是否应该卸载并重新安装软件包.我意识到库的位置是.libPaths()通过"R安装和管理"手册查找并查看了有关迁移库的信息,但没有看到推荐的过程.

我认为有三种选择:

  1. 运行remove.packages()所有非基本软件包,然后重新安装install.packages(lib = "/path/to/new/location").
  2. 移动库(目录)mv并使用符号链接指向新位置(最终删除符号链接)
  3. 使用mv在Linux命令移动目录批发和更新.Library.siteR_HOME/etc/Rprofile.site,如建议[R安装和管理手册

选项#1是生硬的.选项#2应该有效,但似乎有点不合理.

#3是安全还是存在严重问题?我发现的问题是:目录权限以及任何包的设置存储绝对路径而不是相对路径(这似乎不健全且不必要)的可能性.

关于绝对路径的存储,我发现rJava存储了R_HOME一个名为的文件的位置run.这不是一个问题库本身,但它是保持一个绝对路径的专用副本包(和好包在那)的一个指示.

(*)有几个库和许多包.当然,只移动库(目录),但包可能会受到影响.


更新1 /澄清:只是为了澄清:我只是迁移库,而不是更改R的版本或软件包的版本.更新R或包可以单独完成,但问题是移动库是否可行.似乎如果有必要更新或重新安装所有软件包以确保正确安装,那么这是一个类似于选项#1而不是选项#3的路径.

更新2:另一篇SO帖子的答案对于如何在升级时避免此问题有一些好主意.我不是升级R,但Dirk Eddelbuettel关于不在R的filetree中安装软件包的建议是明智的.

42-*_*42- 28

选项#3(将旧库复制到新库)应该可以...但是当且仅当您运行时:

update.packages(checkBuilt=TRUE)
Run Code Online (Sandbox Code Playgroud)

通过这种方式,需要为新版本重建的软件包将得到更新.通常情况下,新版本会增加要求(例如NAMESPACE中2.14.x中即将出现的要求).

编辑:看到这只是在躺椅上移动......如果您要移动任何基础R安装,我将退出支持#3.它在Mac上对我有用,但我没有在R安装和管理指南或R FAQ中看到它应该有效的承诺.您可以按以下顺序完成#1(在各种条件下可能最安全):

# In original installation, get the non-default package list:
save.pkg.list <- installed.packages()[is.na(installed.packages()[ , "Priority"]), 1]
save(save.pkg.list, file="pkglist.Rdata")
# If you want to use remove.packages() at this point it's fine. 
# Or just delete their directories.
Run Code Online (Sandbox Code Playgroud)

使用新安装的R版本,并将.Libpaths设置为您的首选项(甚至是相同的旧安装):

load("pkglist.Rdata")
install.packages(save.pkg.list)
Run Code Online (Sandbox Code Playgroud)

如果没有更改R可执行文件,只需将包移动到新库可能会成功(假设您也更改.Libpaths)但我没有Linux安装来测试它或知道配置操作设置的任何指针将如何受到影响.