#r #foreach #parallel-processing #parallel-foreach
Вопрос:
Вместо того, чтобы использовать rbind или cbind для объединения результатов из foreach, я бы хотел вместо этого возвращать совокупность результатов с помощью colMeans.
Контекст заключается в том, что я пытаюсь использовать k-кратное резюме для настройки лямбды для подгонки модели лассо из пакета, в котором нет резюме. Например, я получаю результаты, которые выглядят примерно так:
library(foreach) lambda_vector lt;- 2:1 foreach(i = 1:length(lambda_vector), .combine = 'rbind') %:% foreach(j= 1:5, .combine = 'rbind') %do% { t lt;- c(lambda_vector[i], rnorm(3, mean = 0.7, .1)) names(t) lt;- c("Lambda", "Accuracy", "Sensitivity", "Specificity") t } Lambda Accuracy Sensitivity Specificity result.1 2 0.8107573 0.6166583 0.5846272 result.2 2 0.7233763 0.7831056 0.8735858 result.3 2 0.7168183 0.8373519 0.8426220 result.4 2 0.8941758 0.7251262 0.9247312 result.5 2 0.6129619 0.7698698 0.6448826 result.1 1 0.6203058 0.6714010 0.6400115 result.2 1 0.6080379 0.7946973 0.6324187 result.3 1 0.6727701 0.6753794 0.8079118 result.4 1 0.6983270 0.7755013 0.8466028 result.5 1 0.5417440 0.7964172 0.7894349
Можно ли агрегировать результаты из внутреннего цикла? Или это лучше всего сделать после запуска цикла? То есть я бы хотел, чтобы вывод выглядел так:
Group.1 Accuracy Sensitivity Specificity 1 1 0.6282370 0.7426793 0.7432759 2 2 0.7516179 0.7464224 0.7740898
Я попытался заменить внутреннюю функцию объединения чем-то вроде
take_mean lt;- function(...){ t1 lt;- rbind(...) colMeans(t1) }
но результаты неверны.
Комментарии:
1. Часто бывает проще вернуть список списков (т. Е. без использования
.combine
) и сформировать результаты позже.2. Я думаю, что пришел к пониманию этого. Я не совсем понимаю, почему я так зациклился на объединении его внутри цикла.