【问题标题】:R How to replicate nulls in a listR如何在列表中复制空值
【发布时间】:2014-11-16 00:12:51
【问题描述】:
list(list(NULL,NULL),list(NULL,NULL))

结果是:

[[1]]
[[1]][[1]]
NULL

[[1]][[2]]
NULL

[[2]]
[[2]][[1]]
NULL

[[2]][[2]]
NULL

假设我想对大于 2 的数字执行此操作,有没有办法通过复制获得相同的列表结构?

【问题讨论】:

    标签: r list null replicate


    【解决方案1】:

    使用replicate

    replicate(n=3, {replicate(n=3,NULL,simplify=FALSE)},simplify=FALSE)
    
    
    [[1]]
    [[1]][[1]]
    NULL
    
    [[1]][[2]]
    NULL
    
    [[1]][[3]]
    NULL
    
    
    [[2]]
    [[2]][[1]]
    NULL
    
    [[2]][[2]]
    NULL
    
    [[2]][[3]]
    NULL
    
    
    [[3]]
    [[3]][[1]]
    NULL
    
    [[3]][[2]]
    NULL
    
    [[3]][[3]]
    NULL
    

    或者更简单(感谢@RichardScriven)

    replicate(3, list(replicate(3, list(NULL))))
    

    【讨论】:

      【解决方案2】:

      也许写一个小函数,这样你就可以调整每个列表的复制和长度,并且还可以选择返回一个数组或一个列表。

      nest <- function(len = 1L, n = 1L, ...) {
          replicate(n, vector("list", len), ...)
      }
      nest()
      nest(2)
      nest(2, simplify = FALSE)
      nest(3, 2, simplify = FALSE)
      

      【讨论】:

        【解决方案3】:

        您可以使用rep 用更少的字母来做到这一点:

        rep(list(rep(list(NULL), 3)), 3)
        
        
        [[1]]
        [[1]][[1]]
        NULL
        
        [[1]][[2]]
        NULL
        
        [[1]][[3]]
        NULL
        
        
        [[2]]
        [[2]][[1]]
        NULL
        
        [[2]][[2]]
        NULL
        
        [[2]][[3]]
        NULL
        
        
        [[3]]
        [[3]][[1]]
        NULL
        
        [[3]][[2]]
        NULL
        
        [[3]][[3]]
        NULL
        

        【讨论】:

          猜你喜欢
          • 2021-10-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-11-12
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多