如何在 R 中预分配和命名嵌套列表

How to preallocate and name nested lists in R

提问人:Jade131621 提问时间:10/16/2023 更新时间:10/16/2023 访问量:37

问:

我将运行模型,并希望将各个模型的输出保存到列表中,以便以后可以访问它们。每个单独的模型也将使用不同的参数集和模型类型运行,因此我想做的是预先分配一个命名嵌套列表来保存模型的输出。我希望列表的最外层是 ID,下一级是参数,最内层是模型类型。以 ID 为例:

IDs = c("ID1", "ID2", "ID3")
parameter_level = c("100", "200")
model_type = c("type1", "type2", "type3")
named_nested_list
$ID1
 $100
  $type1
    NULL
  $type2
    NULL
  $type3
    NULL
 $200
  $type1
   NULL
...

我能弄清楚如何做到这一点的唯一方法是创建内部列表,然后不断向其添加更多列表。喜欢

model_type_list = vector(mode = "list", length = length(model_type)
names(model_type_list) = model_type
parameter_level_list = list('100' = model_type_list, '200' = model_type_list)
named_nested_list = list("ID1" = parameter_level_list, "ID2" = parameter_level_list)

除了我有 30 个 ID 和 5 个参数。

另外,是否有另一种类型的数据结构可以更好地处理这个问题?该列表是我所知道的能够访问每个底层模型的全部内容,并且保持组件命名将有助于防止混淆我正在访问列表的哪一部分,谢谢。

我确实阅读了以下内容,但我要么不明白“表格查找”答案的含义(框中的 Marc)、(Sonia) 的答案,或者如何修改 (Adam Lee Perelman) 和 () 的答案,以允许我命名列表的各个组成部分。

嵌套列表:如何在输入数据之前定义大小

我也在下面找到了这个问题,但这需要我重命名列表的每个部分。有没有办法更以编程方式命名它?

如何在 R 中的嵌套列表中设置名称?

谢谢

r 嵌套列表

评论

2赞 Gregor Thomas 10/16/2023
在您的第一个链接上有一个赞成的评论,上面写着“没有必要预先分配列表和 afaik,如果您这样做,则不会获得性能提升(这与其他数据结构不同)。但是,您看到需求可能意味着您的整个方法可以得到优化。所以我很好奇你为什么要预先分配这些列表?
0赞 Jade131621 10/17/2023
我希望以后能够访问单个模型结果,以防我需要从模型中提取其他内容或检查模型拟合,而无需重新运行所有模型。
1赞 Gregor Thomas 10/17/2023
当然,但为什么要预先分配而不是在分配时分配呢?
1赞 Gregor Thomas 10/17/2023
如果我是你,我想我应该把元数据放在数据帧中,并在类列中填充模型,然后使用 or 或其他任何东西来运行模型并将它们存储在数据帧的另一列中。我看不出使用嵌套列表结构(尤其是预先分配的列表结构)除了令人头疼之外还有什么好处。listmodel_data = expand.grid(IDs = c("ID1", "ID2", "ID3"), parameter_level = c("100", "200"), model_type = c("type1", "type2", "type3"))mapplypurrr::map

答: 暂无答案