【发布时间】:2014-09-01 12:25:24
【问题描述】:
在 R 终端中运行以下代码时:
library(parallel)
func <- function(a,b,c) a+b+c
testfun <- function() {
cl <- makeCluster(detectCores(), outfile="parlog.txt")
res <- clusterMap(cl, func, 1:10, 11:20, MoreArgs = list(c=1))
print(res)
stopCluster(cl)
}
testfun()
...它工作得很好。但是,当我将这两个函数定义复制到自己的包中时,添加一行#' @import parallel,在R 终端上执行dev_tools::load_all("mypackage"),然后调用testfun(),我得到一个
Error in unserialize(node$con) (from myfile.r#7) :
error reading from connection
其中#7 是包含对clusterMap 的调用的行。
所以完全相同的代码可以在终端上运行,但不能在包中运行。
如果我查看parlog.txt,我会看到以下内容:
starting worker pid=7204 on localhost:11725 at 13:17:50.784
starting worker pid=4416 on localhost:11725 at 13:17:51.820
starting worker pid=10540 on localhost:11725 at 13:17:52.836
starting worker pid=9028 on localhost:11725 at 13:17:53.849
Error: (converted from warning) namespace 'mypackage' is not available and has been replaced
by .GlobalEnv when processing object ''
Error: (converted from warning) namespace 'mypackage' is not available and has been replaced
by .GlobalEnv when processing object ''
Error: (converted from warning) namespace 'mypackage' is not available and has been replaced
by .GlobalEnv when processing object ''
Error: (converted from warning) namespace 'mypackage' is not available and has been replaced
by .GlobalEnv when processing object ''
这个问题的根源是什么,我该如何解决?
请注意,我正在使用一个完全新鲜的裸包进行此操作。 (由devtools::create 创建。)因此不会与现有的、可能具有破坏性的代码进行交互。
【问题讨论】:
标签: r parallel-processing devtools