Выберите несколько элементов из списка

У меня есть список в 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)
Другие вопросы по тегам