我编写了一个简化包安装,更新和加载的功能:
LoadPackages <- function(package.list){
if (length(intersect(package.list, old.packages()[, "Package"])))
update.packages(checkBuilt=TRUE, ask=FALSE)
new.package.list <- setdiff(package.list, installed.packages()[, "Package"])
if (length(new.package.list))
install.packages(new.package.list, dependencies=TRUE, repos='http://cran.rstudio.com')
attached <- search()
unloaded.package.list <- setdiff(package.list, gsub("package:", "", attached[grepl("package", attached)]))
if (length(unloaded.package.list))
sapply(unloaded.package.list, require, character.only=TRUE)
}
当我正常使用它时,没有问题,而且效果很好。但是,我只是在R中进行并行计算,而我想要使用parLapply的函数取决于几个包,所以我试图通过获取LoadPackages所在的R文件并调用它来加载它们:
cl <- makeCluster(detectCores() - 1)
clusterEvalQ(cl, {
source("S:/Innovation Office/innovation/all/r/inn_all_r.R")
LoadPackages(c('dplyr', 'ggplot2', 'ifultools', 'scales'))
})
我收到此错误:
Error in checkForRemoteErrors(lapply(cl, recvResult)) :
7 nodes produced errors; first error: trying to use CRAN without setting a mirror
这对我来说有点令人费解,因为我确实将存储库设置为将其作为参数的唯一函数。但是,我尝试将chooseCRANmirror()
添加到函数的顶部,只是为了得到:
Error in checkForRemoteErrors(lapply(cl, recvResult)) :
7 nodes produced errors; first error: cannot choose a CRAN mirror non-interactively
我不知道发生了什么,或者为什么这个错误只出现在我并行使用该功能的时候,但是我肯定希望这些和我的其他功能可用,所以我很感激帮助这个。
答案 0 :(得分:0)
update.packages
函数也有一个repos
参数。我认为如果你提供这个论点,错误就会消失。
发生第二个错误是因为集群工作者以非交互方式执行,因此他们无法执行chooseCRANmirror
等交互式功能。
更新
old.packages
也有一个repos
参数。您也可以设置它,或者只使用options
函数来设置默认存储库。如果将以下行添加到LoadPackages
函数的开头,它将在函数执行时设置默认存储库,但在退出时重置它:
orig <- options(repos="http://cran.rstudio.com")
on.exit(options(repos=orig))