#r #loops #foreach
#r #циклы #foreach
Вопрос:
Я попытался превратить этот for
цикл в foreach
цикл, чтобы, наконец, запустить его параллельно. Но я думаю, что я неправильно понял концепцию 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})
}
Так что все работает нормально. Он выводит списки, которые возвращаются с помощью #whateverfunction . Но полностью игнорирует другие настройки переменных.
Возвращаемый список представляет собой список размером от 1:1000 с выводом #whateverfunction . Функция является завершенной и возвращает множество списков и написана на C . Вот почему я не прикрепил полностью запущенный пример. Но я могу разобраться, если это необходимо. Но я думаю, что я только что совершил основную ошибку и, возможно, я просто погуглил неправильные теги.
Ответ №1:
Попробуйте testlist[[j]]
заменить temp
и добавить явный возврат в конце: 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)
}