vectores recodificar listas leer funcion datos data creacion agrupar r list sapply

recodificar - Cómo subcontratar desde una lista en R



recodificar variables en r (6)

Tengo una tarea bastante simple pero no he encontrado una buena solución.

> 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)

Me gustaría extraer de mi lista los subelementos 3,5 y 9 de cada componente de la lista. He intentado, sapply[mylist,"[[",y] pero no suerte! Y otros como vapply, lapply, etc. Gracias de antemano por su ayuda

Mauriz ortiz


Hay mejores maneras de hacer esto, pero aquí hay una solución rápida.

# 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


Intente usar [ lugar de [[ (y, dependiendo de lo que lapply ), en realidad quiere que se lapply ).

Desde ?''[['' :

La distinción más importante entre [, [[y $] es que [puede seleccionar más de un elemento, mientras que los otros dos seleccionan un solo elemento.


No creo que la respuesta de sgibb dé lo que quisieras. Sugiero hacer una nueva función:

subsetList <- function(myList, elementNames) { lapply(elementNames, FUN=function(x) myList[[x]]) }

Entonces puedes usarlo así:

x <- list(a=3, b="hello", c=4.5, d="world") subsetList(x, c("d", "a")) subsetList(x, c(4, 1))

Estos dos dan

[[1]] [1] "world" [[2]] [1] 3

que es lo que querrías, creo.


Puedes usar sapply(mylist, "[", y) :

mylist <- list(1:5, 6:10, 11:15) sapply(mylist, "[", c(2,3))


Utilizando 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 proporciona otra solución para resolver este tipo de manipulaciones de listas dentro del tidyverse

library(purrr) library(dplyr) desired_values <- c(1,3) mylist <- list(1:5, letters[1:6], 11:15) %>% purrr::map(`[`,desired_values) mylist