Я боролся с работой циклов foreach в R. Чтобы ускорить мой код, я пытаюсь преобразовать свой цикл for в цикл foreach с% dopar%.
Моя цель состоит в том, чтобыв итоге получим три списка одинаковой длины, каждый из которых заполнен фреймами данных, представляющими оценки между двумя пользователями (я сравниваю три разных метода расчета).
Раньше мой код был (очень простое представление):
for (a in 1:5) {
#Just creating some sample data
resultA <- data.frame(matrix(nrow = 40, ncol = 3))
resultB <- data.frame(matrix(nrow = 40, ncol = 3))
resultC <- data.frame(matrix(nrow = 40, ncol = 3))
names(resultA) <- c("User1", "User2", "score")
names(resultB) <- c("User1", "User2", "score")
names(resultC) <- c("User1", "User2", "score")
resultA$User1 <- 1:40
resultB$User1 <- 1:40
resultC$User1 <- 1:40
resultA$User2 <- 40:1
resultB$User2 <- 40:1
resultC$User2 <- 40:1
resultA$score <- sample(40)
resultB$score <- sample(40)
resultC$score <- sample(40)
ListA[[a]] <- resultA
ListB[[a]] <- resultB
ListC[[a]] <- resultC
}
С этим кодом я действительно получаю три хороших списка, каждый из которых содержит 5 фреймов данных.
Сейчас я пытаюсь перевести это в цикл foreach, поскольку он может возвращать только одну переменную(поправьте меня если я ошибаюсь).Поэтому я решил поместить списки в основной список, но у меня возникли проблемы с получением списка из трех подсписков в результате.В основном я хочу добавить эти три списка к себе, но не друг к другу.(Поэтому добавьте resultA к ListA, resultB к ListB и т. Д.).
Я пробовал несколько вариантов .combine и .init, но, похоже, не могу понять это.С большинством функций для .combine я либо получаю огромную матрицу (что плохо, потому что я не могу различить различные методы оценки), либо списки в списках в списках в списках в ...
РЕДАКТИРОВАТЬ:Я решил свою проблему с помощью функции purrr :: transpose () для транспонирования списков в списках.Это привело к одному списку с тремя списками (именно так, как я хотел).Спасибо за помощь!