【发布时间】:2019-05-08 05:46:32
【问题描述】:
我有一个函数,它返回两个对象的列表(一个列表l 和一个数字n)。我想在foreach 循环中循环这个函数。
create_lists <- function(){
l = sample(100, 5)
n = sample(100, 1)
return(list(l=l, n=n))}
因为create_lists 有一个列表作为输出,this post 告诉我使用如下所示的组合函数:
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
但我得到的是这样的:
$l
[1] 84 28 75 59 68 84 28 75 59 68
$n
[1] 31 91 18 98 39
所以我有两个问题:
1) 为什么除了两个l 列表之外的所有内容都被删除了?
2) 如何使m$l 成为列表列表?
编辑:
我尝试了从here 得到的另一种方法,它不使用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
【问题讨论】:
-
在
combine_custom中,你的意思是 ``` ls = c(list1$l, list2$l)``` 而不是将 list2 与自身结合起来吗?那应该解决问题(1)。问题(2)是因为使用c来组合列表。 -
是的,谢谢,这解决了一个问题。但我仍然坚持列表列表。你会用什么代替?我试过link这个,但结果相同。