如何从 r 中的列表中提取所有子列表?
How to extract all sublists from a list in r?
有很多接近的解决方案,但不幸的是我找不到正确的解决方案。我有如下列表列表。正如您所看到的,在他们的 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
你可以 unlist
与 recursive = FALSE
:
res <- unlist(data, recursive = FALSE)
检查输出:
all.equal(out, res)
# [1] TRUE
我们也可以用flatten
library(purrr)
res <- flatten(data)
identical(out, res)
#[1] TRUE
有很多接近的解决方案,但不幸的是我找不到正确的解决方案。我有如下列表列表。正如您所看到的,在他们的 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
你可以 unlist
与 recursive = FALSE
:
res <- unlist(data, recursive = FALSE)
检查输出:
all.equal(out, res)
# [1] TRUE
我们也可以用flatten
library(purrr)
res <- flatten(data)
identical(out, res)
#[1] TRUE