Ответ 1
Вы можете использовать sapply(mylist, "[", y)
:
mylist <- list(1:5, 6:10, 11:15)
sapply(mylist, "[", c(2,3))
У меня довольно простая задача, но я не нашел хорошего решения.
> mylist
[[1]]
[1] 1 2 3 4 5 6 7 8 9 10
[[2]]
[1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s" "t" "u" "v" "w" "x" "y" "z"
[[3]]
[1] 25 26 27 28 29 30 31 32
y <- c(3,5,9)
Я хотел бы извлечь из mylist субэлементы 3,5 и 9 каждого компонента в списке.
Я пробовал, sapply[mylist,"[[",y]
, но не удача!, и другие, такие как vapply, lapply и т.д. Спасибо заранее за вашу помощь.
Маурисио Ортис
Вы можете использовать sapply(mylist, "[", y)
:
mylist <- list(1:5, 6:10, 11:15)
sapply(mylist, "[", c(2,3))
Попробуйте использовать [
вместо [[
(и в зависимости от того, что вы после этого хотите на самом деле хотите lapply
).
От ?'[['
:
Самое важное различие между [, [[и $] состоит в том, что [может выберите более одного элемента, тогда как остальные два выберите один элемент.
Использование lapply
:
# create mylist
list1<-1:10
list2<-letters[1:26]
list3<-25:32
mylist<-list(list1,list2,list3)
# select 3,5,9th element from each list
list.2 <- lapply(mylist, function(x) {x[c(3,5,9)]})
purrr предоставляет другое решение для решения этих видов манипуляций списками в пределах tidyverse
library(purrr)
library(dplyr)
desired_values <- c(1,3)
mylist <- list(1:5, letters[1:6], 11:15) %>%
purrr::map(`[`,desired_values)
mylist
Есть лучшие способы сделать это, но здесь быстрое решение.
# your values
list1<-1:10
list2<-letters[1:26]
list3<-25:32
# put 'em together in a list
mylist<-list(list1,list2,list3)
# function
foo<-function(x){x[c(3,5,9)]}
# apply function to each of the element in the list
foo(mylist[[1]])
foo(mylist[[2]])
foo(mylist[[3]])
# check the output
> foo(mylist[[1]])
[1] 3 5 9
> foo(mylist[[2]])
[1] "c" "e" "i"
> foo(mylist[[3]])
[1] 27 29 NA