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