附加列表/选择数据结构

时间:2014-07-22 05:01:45

标签: r list data-structures nested-lists

我正在评估模拟的性能,该模拟返回每个代表的性能统计信息列表。目前,它返回以下嵌套列表的更复杂版本:

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

其中type1type2是我的模拟数据集中的不同类型的变量(例如,二进制和普通),stat1stat2和{{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的相应列表中添加新的“行” }。

有一种简单有效的方法吗?或者(我怀疑是这种情况)我是否应该完全使用不同的数据结构? 我最终的目标是循环模拟,每次为每个性能统计数据添加一个新条目。然后,我将计算所有模拟中每个性能统计量的均值,分别绘制不同的组和统计数据。出于这个原因,我喜欢列表与数据框或矩阵的层次结构。

1 个答案:

答案 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