У меня есть функция, которая возвращает список из двух объектов (список l
и число n
).Я хочу зациклить эту функцию в цикле foreach
.
create_lists <- function(){
l = sample(100, 5)
n = sample(100, 1)
return(list(l=l, n=n))}
Поскольку create_lists
имеет список в качестве вывода, этот пост сказал мне использовать функцию объединения, которая выглядитвот так:
combine_custom <- function(list1, list2){
ls = c(list1$l, list2$l)
ns = c(list1$n, list2$n)
return(list(l = ls, n = ns))
}
Так что теперь мой цикл foreach
выглядит так:
m = foreach(i=1:5, .combine = combine_custom)%do%{
create_lists()}
Мой желаемый результат будет:
m$l
[[1]]
[1] 100 25 86 21 28
[[2]]
[1] 78 37 79 41 61
[[3]]
[1] 73 22 78 94 13
[[4]]
[1] 15 28 76 78 52
[[5]]
[1] 32 93 92 2 1
m$n
[1] 52 56 3 79 82
Но что яget выглядит примерно так:
$l
[1] 84 28 75 59 68 84 28 75 59 68
$n
[1] 31 91 18 98 39
Итак, у меня две проблемы: 1) Почему отбрасывается все, кроме двух списков l
?2) Как я могу сделать m$l
списком списков?
РЕДАКТИРОВАТЬ: Я попробовал другой подход, полученный из здесь , который не использует c
:
combine_custom <- function(list1, list2){
ls = list1$l[[length(list1$l)+1]] = list(list2$l)
ns = c(list1$n, list2$n)
return(list(l = ls, n = ns))
}
Но это дало тот же результат, что и описанный выше, а именно:
$l
$l[[1]]
[1] 65 84 48 81 82
$n
[1] 88 79 92 36 71