【问题标题】:Accessing multiple levels of a deeply nested lists when a level has no name当级别没有名称时访问深度嵌套列表的多个级别
【发布时间】:2019-02-07 19:48:44
【问题描述】:

当一个元素嵌套在不同的级别并且没有名称时,我似乎无法弄清楚如何访问列表的多个元素。在下面的示例中,我可以很容易地提取标题元素:

library(purrr)

obj1 <- list(resource = list(list(format = "a"), list(format = "b")), title = "blue")
obj2 <- list(resource = list(list(format = "y"), list(format = "z")), title = "red")

x <- list(foo = obj1, bar = obj2)

imap(x[1:length(x)], ~ {
  paste0(.y, ": ", .x[["title"]])
})
#> $foo
#> [1] "foo: blue"
#> 
#> $bar
#> [1] "bar: red"

reprex package (v0.2.1) 于 2019 年 2 月 7 日创建

我的目标是有一个访问这些元素的输出:

x[["foo"]][["resource"]][[1]][["format"]]
x[["foo"]][["resource"]][[2]][["format"]]
x[["bar"]][["resource"]][[1]][["format"]]
x[["bar"]][["resource"]][[2]][["format"]]

然后最终输出看起来像这样:

#> $foo
#> [1] "foo: blue (a,b)"
#> 
#> $bar
#> [1] "bar: red (y,z)"

似乎我应该能够在一个 purrr 语句中做到这一点,但我无法完全弄清楚。

【问题讨论】:

    标签: r purrr


    【解决方案1】:

    使用purrr,我们还可以使用pluck()map 从列表中获取值。这似乎返回了你想要的

    imap(x, ~paste0(
        .y, ": ", pluck(.x, "title"),
        " (", 
        paste0(map_chr(pluck(.x, "resource"), pluck, "format"), collapse=","), 
        ")"))
    

    返回

    $foo
    [1] "foo: blue (a,b)"
    $bar
    [1] "bar: red (y,z)"
    

    【讨论】:

      猜你喜欢
      • 2011-08-27
      • 2021-04-25
      • 2023-03-03
      • 1970-01-01
      • 2022-10-16
      • 2013-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多