【问题标题】:Appending lists / choosing a data structure附加列表/选择数据结构
【发布时间】:2014-07-22 05:01:45
【问题描述】:

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

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 的相应列表中添加新的“行”。

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

【问题讨论】:

  • 没有提供足够的信息。但我的猜测是您的代码只需要更改即可将每个输出的每个部分添加到列表的正确部分中。
  • 想要的结果是什么?

标签: r list data-structures nested-lists


【解决方案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

【讨论】:

  • 这是完美的。谢谢!
猜你喜欢
  • 2011-02-14
  • 2021-02-15
  • 2011-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-24
相关资源
最近更新 更多