Как преобразовать список в вектор значений одного из его полей? - PullRequest
1 голос
/ 16 апреля 2019
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 s из этого списка; т.е. я хочу получить эквивалент c(5, 55, 555), поскольку значения полей qwerty последовательных элементов этого списка равны 5, 55, 555.

Как это получить?

(В случае, если я попал в XY: то, чего я действительно хочу достичь, - это получить элемент этого списка, у которого поле qwerty имеет наибольшее значение; и я подумал, что один из способов получить это должен был извлечь qwerty s в промежуточный numeric, который я мог тогда назвать max on)

1 Ответ

3 голосов
/ 16 апреля 2019

Мы можем pluck "qwerty" элементы, проходя через list с map

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, .)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...