使用名称提取列表元素

时间:2019-07-08 16:27:04

标签: r list

我有一个列表

ls<-list(c("a"="one","b"="two"),"x"="t4",c("y"="t5","z"="t6"))

我想通过名称而不是索引来提取列表元素。有办法吗?

ls["a"]
 > "one"
ls["y"]
> "t5"

我只需要输出“一个”和“ t5”。我将使用这些输出将其与其他字符串解析,或者对其他变量进行算术运算(如果输出为数字)

我发现了一个类似的问题,R: get element by name from a nested list。 但这不起作用。有什么想法吗?

3 个答案:

答案 0 :(得分:2)

使用plyr

plyr::llply(lst,function(x) x["a"])

或:

Filter(Negate(is.na),plyr::llply(lst,function(x) x["y"]))
[[1]]
   y 
"t5"

您可以通过使其具有功能来使其自动化。

尝试使过程自动化(可能很慢):

purrr::map(c("a","y"),
           function(x) lapply(lst, function(z) z[x]))

答案 1 :(得分:1)

鉴于组件名称是唯一的,以下在您的特定情况下可能就足够了(否则存在可识别性问题)。

## data
ls <- list(c(a = "one", b = "two"), x = "t4", list(c(y = "t5", z = "t6")))

getElement <- function(ls, name) unlist(ls)[[grep(name, names(unlist(ls)))]]

getElement(ls, "a")
#> [1] "one"
getElement(ls, "b")
#> [1] "two"
getElement(ls, "x")
#> [1] "t4"
getElement(ls, "y")
#> [1] "t5"

答案 2 :(得分:1)

我们只需unlist列表并使用[[运算符,该运算符将返回未命名的单元素向量:

unlist(ls)[["a"]]
# [1] "one"

unlist(ls)[["y"]]
# [1] "t5"

如果要保留名称,请使用[

unlist(ls2)["a"]
#     a 
# "one" 

unlist(ls2)["y"]
#    y 
# "t5"