我在集群上分配作业,我不想去每台机器手动安装正确的包。作业控制器以无人身份运行脚本,因此我必须为安装指定无可争议的可写路径。我实际上有这个工作解决方案:
`%ni%` = Negate(`%in%`) ### "not in"
.libPaths("/tmp/") ### for local (remote non super user) install of packages
if ("xxx" %ni% installed.packages()) {install.packages("xxx", repos = "http://cran.r-project.org", lib="/tmp/")}
# ... and more
library(xxx)
# ... and more
起初它有效,但一周后我遇到了一个奇怪的问题。
> library(xxx)
Error in library(xxx) : there is no package called 'xxx'
xxx(和其他包)在 installed.packages() 的清单中,.libPaths 报告路径上的 /tmp/,ls 在 /tmp/ 中显示包的文件夹。使用 install.packages 重新安装会引发错误,remove.package、update.package 和 find.package 也是如此。
两个问题:我应该以不同的方式管理远程安装吗?
任何想法是什么导致我无法加载包的问题?
请让我不必实施像
locdir <- paste("/tmp/", as.integer(runif(1, 1, 100000)), sep='')
system(paste("mkdir", locdir))
.libPaths(locdir)
install.packages("xxx", repos = "http://cran.r-project.org", lib=locdir)
library(xxx)