2014-07-21 19 views
0

我想創建一個任務列表,使用mclapply在R parallel中運行。如何在R中創建任務列表時傳遞函數參數?

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)  
} 

當創建列表時,它與參數,而不是隻將其存儲爲列表執行的功能。如果我用一個函數y不帶任何參數(這就是甚至到達實際mclapply之前) ,這種方法細運行:

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

請嘗試以下步驟:

tasks <- list(
    job1 <- substitute(y(5)), 
    job2 <- substitute(y(6)) 
) 

然後

out <- mclapply( 
    tasks, 
    FUN=function(x) eval(x)), 
    mc.cores = length(tasks) 
) 

這應該與並行操作工作,但它是不可能的,我因爲我使用的是Windows測試它。

+0

現在它可以在不執行代碼的情況下創建列表。但是現在當我調用mclapply時,它會連續執行(就像我在原始問題中在列表中定義的那樣)。 – DaReal

相關問題