我有一個非常大的字符串向量,並且想要使用foreach
和dosnow
包進行並行計算。我注意到foreach
會爲每個進程創建向量副本,因此會迅速耗盡系統內存。我試圖在列表對象中將矢量分解爲更小的部分,但仍未看到任何內存使用減少。有沒有人對此有過想法?下面是一些演示代碼:如何避免使用foreach複製對象
library(foreach)
library(doSNOW)
library(snow)
x<-rep('some string', 200000000)
# split x into smaller pieces in a list object
splits<-getsplits(x, mode='bysize', size=1000000)
tt<-vector('list', length(splits$start))
for (i in 1:length(tt)) tt[[i]]<-x[splits$start[i]: splits$end[i]]
ret<-foreach(i = 1:length(splits$start), .export=c('somefun'), .combine=c) %dopar% somefun(tt[[i]])
只是一個想法:當調用 'ret <-foreach(k in tt,.export = c('somefun'),.combine = c)%dopar%somefun(k) '? – Beasterfield 2013-05-05 13:27:58
感謝提示,Beasterfield,但似乎'foreach'未能識別'in'語法。 – baidao 2013-05-05 13:54:48
對不起,當然我的意思是'foreach(k = tt,...)'。 – Beasterfield 2013-05-05 14:10:22