我正在评估模拟的性能,该模拟返回每个代表的性能统计信息列表。目前,它返回以下嵌套列表的更复杂版本:
fakeList = list()
fakeList$group1$stat1 = c("var1" = .3, "var2" = .2)
fakeList$group1$stat2 = c("var1" = .1, "var2" = .3)
fakeList$group2$stat1 = c("var3" = .7)
fakeList$group2$stat3 = c(TRUE)
fakeList
$group1
$group1$stat1
var1 var2
0.3 0.2
$group1$stat2
var1 var2
0.1 0.3
$group2
$group2$stat1
var3
0.7
$group2$stat3
[1] TRUE
其中type1
和type2
是我的模拟数据集中的不同类型的变量(例如,二进制和普通),stat1
,stat2
和{{1}是各种表现统计数据。
我想将以下新条目添加到列表中作为列表中的另一个“行”:
stat3
我尝试了newEntry = list()
newEntry$group1$stat1 = c("var1" = .3, "var2" = .4)
newEntry$group1$stat2 = c("var1" = .2, "var2" = .1)
newEntry$group2$stat1 = c("var3" = .9)
newEntry$group2$stat3 = c(FALSE)
newEntry
$group1
$group1$stat1
var1 var2
0.3 0.4
$group1$stat2
var1 var2
0.2 0.1
$group2
$group2$stat1
var3
0.9
$group2$stat3
[1] FALSE
和append()
,但这些只是将新条目添加到c()
的末尾,而不是在fakeList
的相应列表中添加新的“行” }。
有一种简单有效的方法吗?或者(我怀疑是这种情况)我是否应该完全使用不同的数据结构? 我最终的目标是循环模拟,每次为每个性能统计数据添加一个新条目。然后,我将计算所有模拟中每个性能统计量的均值,分别绘制不同的组和统计数据。出于这个原因,我喜欢列表与数据框或矩阵的层次结构。
答案 0 :(得分:1)
试试这个,Map
每个list
的每个组件相互依次为您提供:
Map(function(x,y) Map(rbind,x,y) , fakeList, newEntry)
#$group1
#$group1$stat1
# var1 var2
#[1,] 0.3 0.2
#[2,] 0.3 0.4
#
#$group1$stat2
# var1 var2
#[1,] 0.1 0.3
#[2,] 0.2 0.1
#
#
#$group2
#$group2$stat1
# var3
#[1,] 0.7
#[2,] 0.9
#
#$group2$stat3
# [,1]
#[1,] TRUE
#[2,] FALSE