我正在尝试使用mclapply创建一个在R parallel中运行的任务列表。
library(parallel)
tasks <- list(
job1 = y(5),
job2 = y(6)
)
# Using fork()
out <- mclapply(
tasks,
function(f) f(),
mc.cores = length(tasks)
)
其中y是例如:
y<-function(x){
a<-x^2
return(a)
}
创建列表时,它使用参数执行函数,而不是仅将其存储为列表。 (所以这是在到达实际的mclapply
之前。)
如果我使用没有任何参数的函数y
,这种方法运行良好:
tasks <- list(
job1 = y,
job2 = y
)
# Using fork()
out <- mclapply(
tasks,
function(f) f(),
mc.cores = length(tasks)
)
其中y是例如:
y<-function(){
a<-5^2
return(a)
}
那么如何在不执行函数的情况下将参数存储在列表中(直到我告诉他们在mclapply中)?
答案 0 :(得分:0)
尝试以下步骤:
tasks <- list(
job1 <- substitute(y(5)),
job2 <- substitute(y(6))
)
然后
out <- mclapply(
tasks,
FUN=function(x) eval(x)),
mc.cores = length(tasks)
)
这应该适用于并行操作,但由于我使用Windows,因此我无法对其进行测试。