【问题标题】:Replicate a list to create a list-of-lists复制列表以创建列表列表
【发布时间】:2012-09-26 16:01:41
【问题描述】:

我正在尝试创建一个具有以下(嵌套)结构的列表:

l <- list()
for(i in seq(5)) l[[i]] <- list(a=NA,b=NA)
> str(l)
List of 5
 $ :List of 2
  ..$ a: logi NA
  ..$ b: logi NA
 $ :List of 2
  ..$ a: logi NA
  ..$ b: logi NA
 $ :List of 2
  ..$ a: logi NA
  ..$ b: logi NA
 $ :List of 2
  ..$ a: logi NA
  ..$ b: logi NA
 $ :List of 2
  ..$ a: logi NA
  ..$ b: logi NA

我想通过rep 或类似的方式执行此操作,因为我正在创建一大堆空白列表,稍后我将填写。(我知道我可以通过引用来扩展列表它的下一个索引,但在索引两个深度时不起作用)。

我认为rep 可以为此工作,但似乎没有。 ?rep 给出了以下示例:

fred <- list(happy = 1:10, name = "squash")
rep(fred, 5)

返回:

> str(rep(fred, 5))
List of 10
 $ happy: int [1:10] 1 2 3 4 5 6 7 8 9 10
 $ name : chr "squash"
 $ happy: int [1:10] 1 2 3 4 5 6 7 8 9 10
 $ name : chr "squash"
 $ happy: int [1:10] 1 2 3 4 5 6 7 8 9 10
 $ name : chr "squash"
 $ happy: int [1:10] 1 2 3 4 5 6 7 8 9 10
 $ name : chr "squash"
 $ happy: int [1:10] 1 2 3 4 5 6 7 8 9 10
 $ name : chr "squash"

换句话说,它使列表变平。

我也尝试过list( rep(fred,5) ),但同样失败了。

如何复制列表列表?

【问题讨论】:

    标签: r list nested-lists


    【解决方案1】:

    我认为这与代表行为有关,您想在代表之前嵌套:

    rep(list(fred),5)
    

    str 输出:

    List of 5
     $ :List of 2
      ..$ happy: int [1:10] 1 2 3 4 5 6 7 8 9 10
      ..$ name : chr "squash"
     $ :List of 2
      ..$ happy: int [1:10] 1 2 3 4 5 6 7 8 9 10
      ..$ name : chr "squash"
     $ :List of 2
      ..$ happy: int [1:10] 1 2 3 4 5 6 7 8 9 10
      ..$ name : chr "squash"
     $ :List of 2
      ..$ happy: int [1:10] 1 2 3 4 5 6 7 8 9 10
      ..$ name : chr "squash"
     $ :List of 2
      ..$ happy: int [1:10] 1 2 3 4 5 6 7 8 9 10
      ..$ name : chr "squash"
    

    【讨论】:

    • 是我自己还是这非常不直观?感谢您的解决方案。
    • @AriB.Friedman -- 如果您比较rep(1:2, 5)rep(list(1:2), 5) 可能更有意义,同时请记住列表确实是一种向量。这有帮助吗?
    • @JoshO'Brien 是的,确实如此。
    【解决方案2】:

    你可以使用replicate:

    l <- replicate(5, list(a=NA,b=NA), simplify=FALSE)
    

    【讨论】:

    • 您知道复制现有对象结构的方法吗?例如。我有一个列表,其中包含多个嵌套级别,我想要一个用于存储结果的空版本,每个嵌套元素使用相同的名称。也许有一种方法可以从整个对象中删除所有 data,只留下结构及其元素名称?
    猜你喜欢
    • 1970-01-01
    • 2020-04-12
    • 2020-03-13
    • 2010-10-29
    • 2012-12-23
    • 2018-12-15
    • 2018-06-25
    • 2017-10-09
    • 2021-12-08
    相关资源
    最近更新 更多