簡體   English   中英

無需特殊特權即可遠程安裝R軟件包。 在/ tmp /中安裝R包也導致Aka損壞

[英]Installing R packages remotely with no special privileges. A.k.a. corruptions from installing R packages in /tmp/

我正在群集上分配作業,而我不想去每台機器上手動安裝正確的軟件包。 作業控制器以沒有人的身份運行腳本,因此我必須為安裝指定無爭議的可寫路徑。 我實際上有這個可行的解決方案:

`%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)

您可能需要option character.only = TRUE選項,盡管您的代碼以前工作過但很奇怪。 無論如何,請嘗試以下功能:

packageLoad<-function(libName){
    # try to load the package
    if (!require(libName,character.only = TRUE)){ 
      # if package is not available, install it
      install.packages(libName,dep=TRUE, 
         repos="http://cran.r-project.org",lib="/tmp/",destdir="/tmp/")
      # try again
      if(!require(libName,character.only = TRUE)) 
         stop(paste("Package ",libName," 
            not found and its installation failed."))
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM