r — Агрегатный комбайн с передним

#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. Я думаю, что пришел к пониманию этого. Я не совсем понимаю, почему я так зациклился на объединении его внутри цикла.