ordenadas notas listas ejemplos definicion crear como bootstrap bloc anidadas r nested-lists

notas - ¿Cómo seleccionar directamente la misma columna de todas las listas anidadas dentro de una lista?



listas en html ejemplos (2)

¿Es posible seleccionar directamente una columna de todas las listas anidadas dentro de una lista?
Mi lista se crea utilizando agregados () con tabla ():

AgN=aggregate(data,by=list(d$date),FUN=table,useNA="no")

AgN$x ve como:

$`0` 1 2 3 9 11 0.447204969 0.438509317 0.096894410 0.009937888 0.007453416 $`1` 1 2 4 8 11 0.489974937 0.389724311 0.102756892 0.006265664 0.011278195 … $n

Quiero obtener un vector de una columna específica de cada tabla, por ejemplo, un vector que contenga los valores de todas las columnas llamadas "1". Todavía soy un principiante en R, pero incluso después de buscar e intentar durante mucho tiempo no encontré una buena solución. Si quiero obtener el campo de una lista, simplemente puedo indexarlo entre paréntesis, por ejemplo, [i, j].
En línea, encontré algunos ejemplos de matrices, así que intenté hacer lo mismo, al principio solo seleccioné una columna de lista anidada con AgN$x[1][1] , pero aún se está seleccionando una lista completa:

$ 0

1 2 3 8 11

0,447204969 0,438509317 0,096894410 0,009937888 0,007453416

Mi siguiente intento fue AgN$x[[1]][1] , y estaba funcionando:

1

0.447205

Así que intenté hacer lo mismo para seleccionar el valor de cada primera columna de todas las listas anidadas:

AgN$x[[1:length(AgN$x]][1] Recursive indexing failed at level 2

Aparentemente, el problema es que está prohibido seleccionar un rango si utiliza un paréntesis doble.

Mi último intento fue usar un bucle for:

cduR=NULL for (i in 1:length(AgN$x)){ t=AgN$x[[i]] cduR=c(cduR,as.vector(t["1"])) }

Finalmente, hasta ahora eso parece funcionar. Pero de esa manera tuve que construir un bucle cada vez que quisiera seleccionar columnas. ¿No hay manera directa?

Gracias por tu ayuda.


Asumiendo que tienes algo como lo siguiente:

myList <- list(`0` = c(`1` = 10, `2` = 20, `3` = 30, `4` = 72), `1` = c(`1` = 15, `2` = 9, `3` = 7)) myList # $`0` # 1 2 3 4 # 10 20 30 72 # # $`1` # 1 2 3 # 15 9 7

Use sapply() o lapply() para ingresar a su lista y extraer las columnas que desee. Algunos ejemplos.

# As a list of one-column data.frames lapply(myList, `[`, 1) # $`0` # 1 # 10 # # $`1` # 1 # 15 # As a list of vectors lapply(myList, `[[`, 1) # $`0` # [1] 10 # # $`1` # [1] 15 # As a named vector sapply(myList, `[[`, 1) # 0 1 # 10 15 # As an unnamed vector unname(sapply(myList, `[[`, 1)) # [1] 10 15

Otras variantes de la sintaxis que también lo llevan allí incluyen:

## Same output as above, different syntax lapply(myList, function(x) x[1]) lapply(myList, function(x) x[[1]]) sapply(myList, function(x) x[[1]]) unname(sapply(myList, function(x) x[[1]]))

Un ejemplo de lista anidada

Si tiene listas anidadas (listas dentro de listas), pruebe las siguientes variantes.

# An example nested list myNestedList <- list(A = list(`0` = c(`1` = 10, `2` = 20, `3` = 30, `4` = 72), `1` = c(`1` = 15, `2` = 9, `3` = 7)), B = list(`0` = c(A = 11, B = 12, C = 13), `1` = c(X = 14, Y = 15, Z = 16))) # Run the following and see what you come up with.... lapply(unlist(myNestedList, recursive = FALSE), `[`, 1) lapply(unlist(myNestedList, recursive = FALSE), `[[`, 1) sapply(unlist(myNestedList, recursive = FALSE), `[[`, 1) rapply(myNestedList, f=`[[`, ...=1, how="unlist")

Tenga en cuenta que para lapply() y sapply() necesita usar unlist(..., recursive = FALSE) mientras que para rapply() (recursive apply), consulte la lista directamente.


Un ejemplo no creo que esté explícitamente en la lista, pero también funciona si tiene una lista de data.frames, matrix, xts, zoo, etc. con nombres de fila y columna, posteriormente puede devolver una fila, columna o colección completa con el siguiente sintaxis:

Listado con objetos de formato:

0% 1% 10% 50% 90% 99% 100% Sec.1 -0.0005259283 -0.0002644018 -0.0001320010 -0.00005253342 0.00007852480 0.0002375756 0.0007870917 Sec.2 -0.0006620675 -0.0003931340 -0.0001588773 -0.00005251963 0.00007965378 0.0002121163 0.0004190017 Sec.4 -0.0006091183 -0.0003994136 -0.0001859032 -0.00005230263 0.00010592379 0.0003165986 0.0007870917 Sec.8 -0.0007679577 -0.0005321807 -0.0002636040 -0.00005232452 0.00014492480 0.0003930241 0.0007870917 Sec.16 -0.0009055318 -0.0007448356 -0.0003449334 -0.00005290166 0.00021238287 0.0004772207 0.0007870917 Sec.32 -0.0013007873 -0.0009552231 -0.0005243472 -0.00007836480 0.00028928104 0.0007382848 0.0013002350 Sec.64 -0.0016409500 -0.0012383696 -0.0006617173 -0.00005280668 0.00042354939 0.0011721508 0.0018579966 Sec.128 -0.0022575471 -0.0018858823 -0.0008466965 -0.00005298436 0.00068616576 0.0014665900 0.0027616991

Código (observe el índice de la primera fila vacía, especificando todas las filas)

simplify2array(lapply(listOfIdenticalObjects,`[`,,"50%"))

Salida

ListItem1 ListItem2 ListItem3 ListItem4 ListItem5 Sec.1 -0.00005253342 -0.00004673443 -0.0001112780 -0.00001870960 -0.00002051009 Sec.2 -0.00005251963 -0.00004663200 -0.0001112904 -0.00001878075 0.00000000000 Sec.4 -0.00005230263 -0.00004669297 -0.0001112780 -0.00001869911 -0.00002034403 Sec.8 -0.00005232452 -0.00004663635 -0.0001111296 -0.00001926096 0.00000000000 Sec.16 -0.00005290166 -0.00004668207 -0.0001109570 0.00000000000 0.00000000000 Sec.32 -0.00007836480 0.00000000000 -0.0001111667 -0.00001894496 0.00000000000 Sec.64 -0.00005280668 0.00000000000 -0.0001110926 -0.00001878305 0.00000000000 Sec.128 -0.00005298436 0.00004675191 0.0000000000 -0.00005582568 0.00001020502