確保所有變量都在與getSetOrderData
相同的環境中定義?我發現,如果我定義
fsub <- function(x){
return(x^2)
}
fmain <- function(x){
x <- fsub(x) + 2
return(x)
}
然後我這樣使用:
require(doParallel)
cl <- makeCluster(2 , outfile = "")
registerDoParallel(cl)
foreach(k = 1:2 , .verbose = TRUE , .combine = c) %dopar%{
fmain(k)
}
我得到的結果如我所料:
numValues: 2, numResults: 0, stopped: TRUE
automatically exporting the following variables from the local environment:
fmain, fsub
got results for task 1
numValues: 2, numResults: 1, stopped: TRUE
returning status FALSE
got results for task 2
numValues: 2, numResults: 2, stopped: TRUE
first call to combine function
evaluating call object to combine results:
fun(result.1, result.2)
returning status TRUE
[1] 3 6
而且進一步,如果我調用的函數 - 這些在.GlobalEnv
之內沒有另外定義 - 在使用source()
的另一個函數內仍然有效。假設我在我的主目錄內創建了一個名爲util_funcs.R
的腳本,並粘貼這兩個函數,但將它們稱爲fsub2
和fmain2
。如果我把它以下列方式:
fsource <- function(x){
source("~/util_funcs.R")
x <- fmain2(x)
return(x)
}
它仍然有效:
numValues: 2, numResults: 0, stopped: TRUE
automatically exporting the following variables from the local environment:
fsource
got results for task 1
numValues: 2, numResults: 1, stopped: TRUE
returning status FALSE
got results for task 2
numValues: 2, numResults: 2, stopped: TRUE
first call to combine function
evaluating call object to combine results:
fun(result.1, result.2)
returning status TRUE
[1] 3 6
你能只複製/粘貼在一個簡易R腳本的所有功能,並使用source()
?
把所有的功能放在一個包裏? – Roland 2013-04-22 09:59:05
:) come'on @Rolland \t這樣做是很多工作,當然有一些簡單的東西比如導出環境或... – statquant 2013-04-22 10:02:53
這些函數在哪裏定義?大概不包,因爲你通過「exportedPkg」處理它們。他們都在'.GlobalEnv',還是在其他地方? – 2013-04-22 16:40:47