确保所有变量都在与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