【问题标题】:Clean a nested list清理嵌套列表
【发布时间】:2021-07-09 22:47:03
【问题描述】:

我有一个日期列表

d = list(list(structure(c(18292, 18321, 18352, 18382, 18413, 18443, 
18474, 18505, 18535, 18566, 18596, 18627), class = "Date")), 
    list(structure(c(18658, 18686, 18717, 18747, 18778, 18808, 
    18839, 18870, 18900, 18931, 18961, 18992), class = "Date")

列表里面访问列表的方法是做


d[[1]][[1]]

我想操作列表,这样我只需要执行 d[[1]] 即可访问第一个元素。但是,当我尝试取消列出时,它变成了

> unlist(d)
 [1] 18292 18321 18352 18382 18413 18443 18474 18505 18535 18566 18596 18627 18658 18686 18717 18747 18778 18808 18839 18870 18900
[22] 18931 18961 18992

为什么日期会变成数字?

【问题讨论】:

    标签: r


    【解决方案1】:

    你应该设置recursive = FALSE

    > unlist(d, recursive = FALSE)[[1]]
     [1] "2020-01-31" "2020-02-29" "2020-03-31" "2020-04-30" "2020-05-31"
     [6] "2020-06-30" "2020-07-31" "2020-08-31" "2020-09-30" "2020-10-31"
    [11] "2020-11-30" "2020-12-31"
    

    【讨论】:

      【解决方案2】:

      你可以使用purrr::flatten -

      l <- purrr::flatten(d)
      l
      
      #[[1]]
      # [1] "2020-01-31" "2020-02-29" "2020-03-31" "2020-04-30" "2020-05-31" "2020-06-30"
      # [7] "2020-07-31" "2020-08-31" "2020-09-30" "2020-10-31" "2020-11-30" "2020-12-31"
      
      #[[2]]
      # [1] "2021-01-31" "2021-02-28" "2021-03-31" "2021-04-30" "2021-05-31" "2021-06-30"
      # [7] "2021-07-31" "2021-08-31" "2021-09-30" "2021-10-31" "2021-11-30" "2021-12-31"
      
      l[[1]]
      
      # [1] "2020-01-31" "2020-02-29" "2020-03-31" "2020-04-30" "2020-05-31" "2020-06-30"
      # [7] "2020-07-31" "2020-08-31" "2020-09-30" "2020-10-31" "2020-11-30" "2020-12-31"
      

      【讨论】:

        【解决方案3】:

        我们可以在base R中使用do.call

        do.call(c, lapply(d, `[[`, 1))`
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-12-24
          • 1970-01-01
          • 1970-01-01
          • 2019-08-20
          • 1970-01-01
          • 2013-08-07
          相关资源
          最近更新 更多