當在R終端運行下面的代碼:如何使用devtools在另一個軟件包內使用並行程序包?
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
創建。)因此,不會與現有的可能具有破壞性的代碼進行交互。
男孩......我真的很喜歡它,如果devtools是固定的,這樣就不會發生,看到很多包現在使用並行包中的函數,很多人想要無縫地使用這些軟件包內,而無需執行此解決方法。 – 2014-10-02 06:40:09