首页 文章

附加列表/选择数据结构

提问于
浏览
0

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

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 是我的模拟数据集中的不同类型的变量(例如,二进制和正常), stat1stat2stat3 是各种性能统计信息 .

我想将以下新条目添加到列表中作为列表中的另一个“行”:

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 的末尾,而不是在 fakeList 的相应列表中添加新的"rows" .

Is there a simple, efficient way to do this? Or (I suspect this is the case) should I be using a different data structure entirely? 我的最终目标是循环模拟,每次都为每个性能统计数据添加一个新条目 . 然后,我将计算所有模拟中每个性能统计量的均值,分别绘制不同的组和统计数据 . 出于这个原因,我喜欢列表与数据框或矩阵的层次结构 .

1 回答

  • 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
    

相关问题