提问人:Iterator 提问时间:8/21/2011 最后编辑:CommunityIterator 更新时间:12/27/2019 访问量:20753
迁移 R 库
Migrating R libraries
问:
我想在 Linux 上将多个 R 库 (*) 从一个驱动器移动到另一个驱动器,并想知道简单的移动是否可行且安全,或者我是否应该卸载并重新安装包。我意识到库的位置是通过“R 安装和管理”手册确定的,并且已经查看了“R 安装和管理”手册以了解有关迁移库的信息,但没有看到推荐的过程。.libPaths()
我认为有三种选择:
- 运行所有非基本软件包,然后通过 重新安装。
remove.packages()
install.packages(lib = "/path/to/new/location")
- 移动库(目录),并使用符号链接指向新位置(并最终删除符号链接)
mv
- 按照 R 安装和管理手册中的建议,在 Linux 中使用命令将目录批发和更新到
mv
.Library.site
R_HOME/etc/Rprofile.site
选项 #1 是直截了当的。选项 #2 应该有效,但似乎有点不合理。
#3 安全还是存在严重问题?我发现的问题是:目录权限以及任何包的设置存储绝对路径而不是相对路径的可能性(这似乎是不合理和不必要的)。
关于绝对路径的存储,我发现将 的位置存储在一个名为 .这本身不是库问题,但它表明一个包(并且是一个很好的包)保留了绝对路径的私有副本。rJava
R_HOME
run
(*)有几个库和许多包。当然,只有库(目录)被移动,但包可能会受到影响。
更新 1 / 澄清:澄清一下:我只是迁移库,而不是更改 R 的版本或包的版本。更新 R 或包可以单独完成,但问题是移动库是否可行。似乎如果有必要更新或重新安装所有软件包以确保正确安装,那么这是一条更类似于选项 #1 而不是选项 #3 的路径。
更新 2:另一个 SO 帖子的答案有一些关于如何在升级时避免此问题的好主意。我不是在升级 R,但 Dirk Eddelbuettel 建议不要在 R 的文件树中安装包是明智的。
答:
选项 #3(将旧库复制到新库)应该可以工作......但是,当且仅当您随后运行:
update.packages(checkBuilt=TRUE)
以这种方式,需要为新版本重建的包将得到更新。通常情况下,新版本会添加要求(例如 2.14.x 中即将对 NAMESPACE 提出的要求)。
编辑:看到这只是在躺椅上移动......如果您要移动任何基本 R 安装,我将放弃认可 #3。它在 Mac 中对我有用,但我在 R 安装和管理指南或 R 常见问题解答中没有看到它应该工作的承诺。您可以通过以下顺序完成 #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.
使用新安装的 R 版本,其中包含 .Libpaths 设置为您的首选项(甚至是相同的旧安装):
load("pkglist.Rdata")
install.packages(save.pkg.list)
如果未更改 R 可执行文件,则仅将包移动到新库可能会成功(假设您还更改了 .Libpaths),但我没有 Linux 安装来测试它,也不知道配置操作设置的任何指针会受到怎样的影响。
评论
将公认的答案与这个答案相结合,我找到了一个更简单的解决方案:
lib_loc <- "C:/Users/apdev/Documents/R/win-library/3.3"
to_install <- unname(installed.packages(lib.loc = lib_loc)[, "Package"])
to_install
remove.packages(to_install, lib="C:/Users/apdev/Documents/R/win-library/3.3")
install.packages(pkgs = to_install, lib="C:/Program Files/R/R-3.6.1/library")
评论