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

¿Es posible seleccionar directamente una columna de todas las listas anidadas dentro de una lista?
Mi lista se crea usando aggregate () con table ():

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

AgN$x ve así:

 $`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 de 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 con corchetes, por ejemplo [i, j].
En línea encontré algunos ejemplos para las matrices, así que traté de hacer lo mismo, al principio solo seleccioné una columna de la lista anidada con AgN$x[1][1] , pero eso todavía está seleccionando una lista completa:

$ 0

  1 2 3 8 11 

0.447204969 0.438509317 0.096894410 0.009937888 0.007453416

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

  1 

0.447205

Así que traté de 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 usa un corchete doble.

Mi último bash fue usar un ciclo 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 quiero seleccionar columnas. ¿No hay una forma directa?

Gracias por tu ayuda.

Suponiendo que tiene 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 

Utilice 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 syntax que también lo llevan hasta 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() (aplicar recursivo), se refiere a la lista directamente.

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

Lista 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 (tenga en cuenta 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 
    Intereting Posts