2016-10-09 215 views
0

我試圖將此for循環放入一個foreach循環以最終並行運行它。但我想我沒有得到foreach循環的概念。我嘗試了更簡單的循環,並總是陷入困境。for循環與列表和子列表foreach循環

原來的for循環簡化代碼:

varName <- rep("name",1000) 
testlist <- list() 
for(j in 1:1000){ 

testlist [[j]]    <- list() 
testlist [[j]]$UsedAlgo  <- "Name" 
testlist [[j]]$UsedPMethod <- varName[j] 
testlist [[j]]$datalists <- list() 
testlist [[j]]$datalists <- lapply(Dataset[[j]]$data,  
           function(x){#whateverfunction}) 

我的foreach循環:

library(foreach) 
library(doMC) 
registerDoMC(35) 
varName <- rep("name",1000) 

testlist <- foreach(j=1:1000) %dopar% { 

testlist[[j]] <- list() 
testlist[[j]]$UsedAlgo  <- "Name" 
testlist[[j]]$UsedPMethod <- varName[j] 
testlist[[j]]$patterns  <- list() 
testlist[[j]]$patterns  <- lapply(Dataset[[j]]$data,     
             function(x){#whateverfunction}) 

} 

所以它運行一種精細。它輸出#whatever函數返回的列表。但完全忽略其他變量設置。

返回的列表是範圍從1:1000到#whateverfunction的輸出的列表。函數完成並返回大量列表,並用C++編寫。這就是爲什麼我沒有附上完整的例子。但如果需要,我可以指出一個問題。但是我認爲我只是犯了一個基本的錯誤,也許我只是使用了錯誤的標籤。

回答

1

嘗試temp更換testlist[[j]]並增加在結束一個明確的回報:return(temp)

testlist <- foreach(j=1:1000) %dopar% {  
    temp <- list() 
    temp$UsedAlgo  <- "Name" 
    temp$UsedPMethod <- varName[j] 
    temp$patterns  <- lapply(Dataset[[j]]$data,     
           function(x){ ... }) 
    return(temp) 
}