【问题标题】:How to extract all sublists from a list in r?如何从r中的列表中提取所有子列表?
【发布时间】:2020-07-23 04:22:23
【问题描述】:

有许多接近的解决方案,但不幸的是我找不到正确的解决方案。我有一个如下列表。如您所见,它们的 up 列表下有 3 个子列表(01-2011、02-2011 和 01-2012)。但我只想获取名称为 (01-2011,02-2011 and 01-2012) 的列表

这是我的数据及其结构;

data<-list(structure(list(`01-2011` = structure(list(dmax = structure(list(
    m5 = 0.266, m10 = 0.532, m15 = 0.797, m30 = 1.092), .Names = c("m5", 
"m10", "m15", "m30"))), .Names = "dmax"), `01-2012` = structure(list(
    dmax = structure(list(m5 = 1.224, m10 = 2.395, m15 = 3.063, 
        m30 = 5.131), .Names = c("m5", "m10", "m15", "m30"))), .Names = "dmax")), .Names = c("01-2011", 
"01-2012")), structure(list(`02-2011` = structure(list(dmax = structure(list(
    m5 = 0.955, m10 = 1.683, m15 = 2.398, m30 = 4.539), .Names = c("m5", 
"m10", "m15", "m30"))), .Names = "dmax")), .Names = "02-2011"))


[[1]]
[[1]]$`01-2011`
[[1]]$`01-2011`$dmax
[[1]]$`01-2011`$dmax$m5
[1] 0.266

[[1]]$`01-2011`$dmax$m10
[1] 0.532

[[1]]$`01-2011`$dmax$m15
[1] 0.797

[[1]]$`01-2011`$dmax$m30
[1] 1.092



[[1]]$`01-2012`
[[1]]$`01-2012`$dmax
[[1]]$`01-2012`$dmax$m5
[1] 1.224

[[1]]$`01-2012`$dmax$m10
[1] 2.395

[[1]]$`01-2012`$dmax$m15
[1] 3.063

[[1]]$`01-2012`$dmax$m30
[1] 5.131




[[2]]
[[2]]$`02-2011`
[[2]]$`02-2011`$dmax
[[2]]$`02-2011`$dmax$m5
[1] 0.955

[[2]]$`02-2011`$dmax$m10
[1] 1.683

[[2]]$`02-2011`$dmax$m15
[1] 2.398

[[2]]$`02-2011`$dmax$m30
[1] 4.539

我尝试了lapply(data, "[["),但这给出了一个错误。

这是所需的输出;

out<-structure(list(`01-2011` = structure(list(dmax = structure(list(
    m5 = 0.266, m10 = 0.532, m15 = 0.797, m30 = 1.092), .Names = c("m5", 
"m10", "m15", "m30"))), .Names = "dmax"), `01-2012` = structure(list(
    dmax = structure(list(m5 = 1.224, m10 = 2.395, m15 = 3.063, 
        m30 = 5.131), .Names = c("m5", "m10", "m15", "m30"))), .Names = "dmax"), 
    `02-2011` = structure(list(dmax = structure(list(m5 = 0.955, 
        m10 = 1.683, m15 = 2.398, m30 = 4.539), .Names = c("m5", 
    "m10", "m15", "m30"))), .Names = "dmax")), .Names = c("01-2011", 
"01-2012", "02-2011"))



$`01-2011`
$`01-2011`$dmax
$`01-2011`$dmax$m5
[1] 0.266

$`01-2011`$dmax$m10
[1] 0.532

$`01-2011`$dmax$m15
[1] 0.797

$`01-2011`$dmax$m30
[1] 1.092



$`01-2012`
$`01-2012`$dmax
$`01-2012`$dmax$m5
[1] 1.224

$`01-2012`$dmax$m10
[1] 2.395

$`01-2012`$dmax$m15
[1] 3.063

$`01-2012`$dmax$m30
[1] 5.131



$`02-2011`
$`02-2011`$dmax
$`02-2011`$dmax$m5
[1] 0.955

$`02-2011`$dmax$m10
[1] 1.683

$`02-2011`$dmax$m15
[1] 2.398

$`02-2011`$dmax$m30
[1] 4.539

【问题讨论】:

    标签: r extract


    【解决方案1】:

    你可以只用unlistrecursive = FALSE

    res <- unlist(data, recursive = FALSE)
    

    检查输出:

    all.equal(out, res)
    
    # [1] TRUE
    

    【讨论】:

      【解决方案2】:

      我们也可以使用flatten

      library(purrr)
      res <- flatten(data)
      identical(out, res)
      #[1] TRUE
      

      【讨论】:

        猜你喜欢
        • 2012-03-26
        • 2021-11-05
        • 2012-10-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多