una tabla listas leer infinito funcion filas eliminar data creacion contar como r data-manipulation

tabla - infinito en r



Extraer elementos no nulos de una lista en R (4)

Tengo una lista como esta:

x = list(a = 1:4, b = 3:10, c = NULL) x #$a #[1] 1 2 3 4 # #$b #[1] 3 4 5 6 7 8 9 10 # #$c #NULL

Y quiero extraer todos los elementos que no sean nulos. ¿Cómo se puede hacer esto? Gracias.


Aquí hay otra opción:

Filter(Negate(is.null), x)


Más simple y probablemente más rápido que lo anterior, lo siguiente funciona para listas de cualquier valor no recursivo (en el sentido de is.recursive ):

example_1_LST <- list(NULL, a=1.0, b=Matrix::Matrix(), c=NULL, d=4L) example_2_LST <- as.list(unlist(example_1_LST, recursive=FALSE))

Imprime str(example_2_LST) :

List of 3 $ a: num 1 $ b:Formal class ''lsyMatrix'' [package "Matrix"] with 5 slots .. ..@ x : logi NA .. ..@ Dim : int [1:2] 1 1 .. ..@ Dimnames:List of 2 .. .. ..$ : NULL .. .. ..$ : NULL .. ..@ uplo : chr "U" .. ..@ factors : list() $ d: int 4


Qué pasa:

x[!unlist(lapply(x, is.null))]

Aquí hay una breve descripción de lo que está pasando.

  1. lapply nos dice qué elementos son NULL

    R> lapply(x, is.null) $a [1] FALSE $b [1] FALSE $c [1] TRUE

  2. A continuación convectamos la lista en un vector:

    R> unlist(lapply(x, is.null)) a b c FALSE FALSE TRUE

  3. Entonces cambiamos TRUE a FALSE :

    R> !unlist(lapply(x, is.null)) a b c TRUE TRUE FALSE

  4. Finalmente, seleccionamos los elementos usando la notación habitual:

    x[!unlist(lapply(x, is.null))]


x[!sapply(x,is.null)]

Esto generaliza a cualquier declaración lógica acerca de la lista, solo sub en la lógica para "is.null".