Выберите несколько элементов из списка
У меня есть список в R около 10000 элементов. Скажем, я хочу выбрать только элементы 5, 7 и 9. Я не уверен, как бы я это сделал без цикла for.
Я хочу сделать что-то вроде mylist[[c(5,7,9]]
но это не работает Я также попробовал lapply
функции, но не смогли заставить это работать.
2 ответа
mylist[c(5,7,9)]
должен сделать это.
Вы хотите, чтобы подсписки были возвращены как подсписки списка результатов; вы не используете [[]] (точнее, функция [[
) для этого - как упоминает Дейсон в комментариях, [[
хватает элемент.
Ответ Glen_b правильный. Ниже приведены несколько примеров того, как вы можете использовать его с каналами, такими функциями, какlapply
и и внутри кадра данных со столбцами списка:
С трубами:
library(tidyverse)
x <- as.list(letters)
nums <- c(5, 7, 9)
x[nums] # Glen's answer
nums |> x[i = _] # using the native pipe
nums %>% {x[.]} # using magrittr's pipe
# nums %>% x[i = .] is equivalent
С использованиемmap()
,lapply()
и т. д.
y = list(as.list(letters), as.list(LETTERS))
map(y, \(x) x[nums]) # lambda function \(x) x[nums] is equivalent to ~ .x[nums] or function(x){x[nums]}
lapply(y, \(x) x[nums])
Со столбцами типа списка в кадрах данных:
df <- tibble(
x = list(x)) # we need to put x within another list, as tibble() will unnest x otherwise
df |>
mutate(z = map(x, \(x) x[nums])) |>
pull(z)