如何在R中创建任务列表时传递函数参数?

时间:2014-07-21 09:36:15

标签: r list function arguments mclapply

我正在尝试使用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中)?

1 个答案:

答案 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,因此我无法对其进行测试。