2012-10-21 18 views
2

我使用並行計算的降雪1.84軟件包並希望每位工作人員在計算過程中將數據寫入其自己的單獨文件。這可能嗎 ?如果是的話如何?我正在使用「SOCK」類型的連接,例如,sfInit(parallel = TRUE,...,type =「SOCK」),並希望代碼與平臺無關(unix/windows)。R並行計算與降雪 - 寫入單獨工作人員的文件

我知道可以使用sfInit中的「slaveOutfile」選項來定義一個文件在哪裏寫日誌文件。但是這是爲了調試目的而設計的,所有的奴隸/工人都必須使用相同的文件。我需要每個工人都有自己的輸出文件!

我需要寫的數據是大型數據框,而不是簡單的診斷信息。這些數據幀需要從服務器輸出,不能發回主進程。 任何人都知道我可以怎麼做到這一點?

感謝

+1

我很好奇。你爲什麼要這樣? – Roland

回答

0

一個簡單的解決方案是使用sfClusterApply執行打開每個工人的不同文件中的函數,分配生成的文件對象到一個全局變量,所以你可以在隨後的並行操作寫它:

library(snowfall) 
nworkers <- 3 
sfInit(parallel=TRUE, cpus=nworkers, type='SOCK') 
workerinit <- function(datfile) { 
    fobj <<- file(datfile, 'w') 
    NULL 
} 
sfClusterApply(sprintf('worker_%02d.dat', seq_len(nworkers)), workerinit) 

work <- function(i) { 
    write.csv(data.frame(x=1:3, i=i), file=fobj) 
    i 
} 
sfLapply(1:10, work) 
sfStop() 
相關問題