首页 > 解决方案 > 向嵌套命名列表添加值的最佳方法

问题描述

我有一个名为 list 的嵌套列表,如下所示:

Browse[2]> rr
[[1]]
[[1]]$parameter
[1] 6

[[1]]$statistic
[1] 13.73371

[[1]]$observed
[1] 63


[[2]]
[[2]]$parameter
[1] 9

[[2]]$statistic
[1] 12.7092

[[2]]$observed
[1] 41

dput输出:

list(list(parameter = 6, statistic = 13.7337141468157, observed = 63L), 
    list(parameter = 9, statistic = 12.7092009771629, observed = 41L), 
)

我还有另一个双打列表,如下所示:

Browse[2]> conf_intervals[1, ]
 [1]   6.592301   8.236966  16.109724   6.629236  15.896665   2.606493  12.970584   5.213050   6.216172  62.650545  12.291587 156.140508
[13]  63.080242  41.772004   1.585398   8.012596  13.538332  17.923161  10.254139   5.857182   7.312259  11.952349  16.303510   6.344661
[25]   1.510251   1.325398  13.766738   2.625461   4.490282  37.430535   9.891200 161.666251 143.450382  65.561283   2.535526   5.749675
[37]  31.575314  22.625427   6.825213

dput输出:

c(6.59230092348831, 8.23696562071911, ..... )

我想将第二个列表中的值添加到具有新名称的嵌套列表中。我希望最终输出如下:

Browse[2]> rr
[[1]]
[[1]]$parameter
[1] 6

[[1]]$statistic
[1] 13.73371

[[1]]$observed
[1] 63

[[1]]$lower
[1] 6.592301


[[2]]
[[2]]$parameter
[1] 9

[[2]]$statistic
[1] 12.7092

[[2]]$observed
[1] 41

[[2]]$lower
[1] 8.236966

有没有一种简单的方法可以在不对嵌套列表进行显式循环的情况下做到这一点?

标签: rlist

解决方案


我会这样做:

rr <- list(list(parameter = 6, statistic = 13.7337141468157, observed = 63L), 
           list(parameter = 9, statistic = 12.7092009771629, observed = 41L)
)
conf <- c(6.59230092348831, 8.23696562071911)

DF <- do.call(rbind.data.frame, rr)
DF$conf <- conf

#if you need a nested list:
split(DF, seq_len(nrow(DF)))

#or if you don't like class data.frame
lapply(split(DF, seq_len(nrow(DF))), as.list)

推荐阅读