Я хотел бы знать, можно ли/возвращать несколько выходов как часть цикла foreach dopar
.
Возьмем очень упрощенный пример. Предположим, что я хотел бы сделать 2 операции как часть цикла foreach
и хотел бы вернуть или сохранить результаты обеих операций для каждого значения i
.
Чтобы вернуть только один вывод, это будет так же просто, как:
library(foreach)
library(doParallel)
cl <- makeCluster(3)
registerDoParallel(cl)
oper1 <- foreach(i=1:100000) %dopar% {
i+2
}
oper1
будет списком с 100000 элементами, каждый элемент будет результатом операции i+2
для каждого значения i.
Предположим теперь, что я хотел бы вернуть или сохранить результаты двух разных операций отдельно, например. i+2
и i+3
. Я попробовал следующее:
oper1 = list()
oper2 <- foreach(i=1:100000) %dopar% {
oper1[[i]] = i+2
return(i+3)
}
надеясь, что результаты i+2
будут сохранены в списке oper1
и что результаты второй операции i+3
будут возвращены foreach
. Однако ничего не заселено в списке oper1
! В этом случае из цикла возвращается только результат i+3
.
Есть ли способ возврата или сохранения обоих выходов в двух отдельных списках?