如何将列表转换为其字段之一的值的向量?

时间:2019-04-16 20:23:12

标签: r list field

l = list()
l[[1]] = list(); l[[1]]$asdf = 'jkl'; l[[1]]$qwerty = 5
l[[2]] = list(); l[[2]]$asdf = 'zxcv'; l[[2]]$qwerty = 55
l[[3]] = list(); l[[3]]$asdf = 'poiu'; l[[3]]$qwerty = 555

现在,我想以某种方式从此列表中提取qwerty;即我想获得一个等效的c(5, 55, 555),因为此列表的连续元素的qwerty字段的值为555555。 / p>

如何获取?

(如果我陷入了XY:我真正想实现的目标是获得该列表中qwerty字段具有最大价值的元素;我想了一种方法要获得此结果,是将qwerty提取到中间numeric中,然后我可以调用max

1 个答案:

答案 0 :(得分:3)

我们可以通过plucklist循环访问map“ qwerty”元素

library(tidyverse)
map_dbl(l, pluck, "qwerty")
#[1]   5  55 555

或使用sapply中的base R

sapply(l, `[[`, "qwerty")
#[1]   5  55 555

max包装以获得最大值

max(sapply(l, `[[`, "qwerty"))
#[1] 555

如果它是list

的元素
i1 <- which.max(sapply(l, `[[`, "qwerty"))
l[i1]
#[[1]]
#[[1]]$asdf
#[1] "poiu"

#[[1]]$qwerty
#[1] 555

或者另一个选择是

l %>%
    transpose %>%
    .$qwerty %>% 
    unlist %>% 
    which.max %>% 
    magrittr::extract(l, .)