definicion body r list vector

body - Cómo extraer elementos de una lista con elementos mixtos



body html definicion (3)

Con purrr puedes extraer elementos y asegurar la consistencia del tipo de datos:

library(purrr) listdata <- list(c("","668","12345_s_at","667", "4.899777748","49.53333333", "10.10930207", "1.598228663","5.087437057"), c("","376", "6789_at", "375", "4.899655078","136.3333333", "27.82508792", "2.20223398", "5.087437057"), c("", "19265", "12351_s_at", "19264", "4.897730912", "889.3666667", "181.5874908","1.846451572","5.087437057" )) map_chr(listdata, 3) ## [1] "12345_s_at" "6789_at" "12351_s_at"

Hay otras funciones map_ que aplican la consistencia del tipo y un map_df() que finalmente puede ayudar a terminar con la do.call(rbind, …) .

Tengo una lista en R con los siguientes elementos:

[[812]] [1] "" "668" "12345_s_at" "667" "4.899777748" [6] "49.53333333" "10.10930207" "1.598228663" "5.087437057" [[813]] [1] "" "376" "6789_at" "375" "4.899655078" [6] "136.3333333" "27.82508792" "2.20223398" "5.087437057" [[814]] [1] "" "19265" "12351_s_at" "19264" "4.897730912" [6] "889.3666667" "181.5874908" "1.846451572" "5.087437057"

Sé que puedo acceder a ellos con algo como list_elem[[814]][3] en caso de que quiera extraer el tercer elemento de la posición 814. Necesito extraer el tercer elemento de toda la lista, por ejemplo 12345_s_at , y Quiero ponerlos en un vector o lista para poder comparar sus elementos con otra lista más adelante. A continuación se muestra mi código:

elem<-(c(listdata)) lp<-length(elem) for (i in 1:lp) { newlist<-c(listdata[[i]][3]) ###maybe to put in a vector print(newlist) }

Cuando imprimo los resultados obtengo el tercer elemento, pero así:

[1] "1417365_a_at" [1] "1416336_s_at" [1] "1416044_at" [1] "1451201_s_at"

así que no puedo atravesarlos con un índice como newlist[3] , porque devuelve NA . ¿Dónde está mi error?


En caso de que quisiera usar el código que escribió en su pregunta, a continuación está la solución:

listdata <- list(c("","668","12345_s_at","667", "4.899777748","49.53333333", "10.10930207", "1.598228663","5.087437057"), c("","376", "6789_at", "375", "4.899655078","136.3333333", "27.82508792", "2.20223398", "5.087437057"), c("", "19265", "12351_s_at", "19264", "4.897730912", "889.3666667", "181.5874908","1.846451572","5.087437057" )) v <- character() #creates empty character vector list_len <- length(listdata) for(i in 1:list_len) v <- c(v, listdata[[i]][3]) #fills the vector with list elements (not efficient, but works fine) print(v) [1] "12345_s_at" "6789_at" "12351_s_at"


Si desea extraer el tercer elemento de cada elemento de lista, puede hacerlo:

List <- list(c(1:3), c(4:6), c(7:9)) lapply(List, ''[['', 3) # This returns a list with only the third element unlist(lapply(List, ''[['', 3)) # This returns a vector with the third element

Usando tu ejemplo y teniendo en cuenta @GSee comentario puedes hacer:

yourList <- list(c("","668","12345_s_at","667", "4.899777748","49.53333333", "10.10930207", "1.598228663","5.087437057"), c("","376", "6789_at", "375", "4.899655078","136.3333333", "27.82508792", "2.20223398", "5.087437057"), c("", "19265", "12351_s_at", "19264", "4.897730912", "889.3666667", "181.5874908","1.846451572","5.087437057" )) sapply(yourList, ''[['', 3) [1] "12345_s_at" "6789_at" "12351_s_at"

La próxima vez, puede proporcionar algunos datos utilizando el dput en una parte de su conjunto de datos para que podamos reproducir su problema fácilmente.