studio - seleccionar columnas en r
Agregar una lista a una lista de listas en R (5)
Al poner primero una asignación de lista en una variable
myVar <- list()
abre la posibilidad de asignaciones jerárquicas
myVar[[1]] <- list()
myVar[[2]] <- list()
y así sucesivamente ... así que ahora es posible hacer
myVar[[1]][[1]] <- c(...)
myVar[[1]][[2]] <- c(...)
o
myVar[[1]][[''subVar'']] <- c(...)
y así
también es posible asignar nombres directamente (en lugar de $)
myVar[[''nameofsubvar]] <- list()
y entonces
myVar[[''nameofsubvar]][[''nameofsubsubvar'']] <- c(''...'')
importante recordar es usar siempre corchetes dobles para que el sistema funcione
entonces para obtener información es simple
myVar$nameofsubvar$nameofsubsubvar
y así...
ejemplo:
a <-list()
a[[''test'']] <-list()
a[[''test'']][[''subtest'']] <- c(1,2,3)
a
$test
$test$subtest
[1] 1 2 3
a[[''test'']][[''sub2test'']] <- c(3,4,5)
a
$test
$test$subtest
[1] 1 2 3
$test$sub2test
[1] 3 4 5
una buena característica del lenguaje R en su definición jerárquica ...
Lo usé para una implementación compleja (con más de dos niveles) ¡y funciona!
Estoy teniendo problemas para agregar datos a una lista que ya está en un formato de lista. Tengo un programa que exportará objetos de resultados durante un ciclo de simulación. Los datos en sí se almacenan como una lista de matrices. Mi idea es almacenar esas listas en una lista, y luego guardar esta lista de listas como un objeto R para un análisis posterior, sin embargo, tengo algunos problemas para lograr esto correctamente. Mostraré lo que he hecho con un pequeño ejemplo abstracto simplemente usando valores en lugar de los datos de la matriz de mi simulación:
Digamos que he ejecutado el ciclo de simulación 3 veces. Durante las iteraciones, las listas de resultados deben recopilarse en la lista de listas que guardaré como un objeto R:
Lista para contener las otras listas y ser guardado: outlist1 <- list()
Primera iteración: resultsa <- list(1,2,3,4,5)
outlist <- append(outlist1,resultsa)
Segunda iteración: resultsb <- list(6,7,8,9,10)
outlist <- append(outlist1,b)
Tercera iteración: resultsc <- list(11,12,13,14,15)
outlist <- list(outlist2,c)
Sin embargo, esta solución no funciona con el crecimiento de una lista que contiene listas de esta manera, el resultado deseado es:
>outlist
[[1]]
[[1]][[1]]
[1] 1
[[1]][[2]]
[1] 2
[[1]][[3]]
[1] 3
[[1]][[4]]
[1] 4
[[1]][[5]]
[1] 5
[[2]]
[[2]][[1]]
[1] 6
[[2]][[2]]
[1] 7
[[2]][[3]]
[1] 8
[[2]][[4]]
[1] 9
[[2]][[5]]
[1] 10
[[3]]
[[3]][[1]]
[1] 11
[[3]][[2]]
[1] 12
[[3]][[3]]
[1] 13
[[3]][[4]]
[1] 14
[[3]][[5]]
[1] 15
Sin embargo, en cambio, lo que obtengo es:
> outlist3
[[1]]
[[1]][[1]]
[[1]][[1]][[1]]
[1] 1
[[1]][[1]][[2]]
[1] 2
[[1]][[1]][[3]]
[1] 3
[[1]][[1]][[4]]
[1] 4
[[1]][[1]][[5]]
[1] 5
[[1]][[2]]
[[1]][[2]][[1]]
[1] 6
[[1]][[2]][[2]]
[1] 7
[[1]][[2]][[3]]
[1] 8
[[1]][[2]][[4]]
[1] 9
[[1]][[2]][[5]]
[1] 10
¿Cómo hago crecer una lista, de modo que la lista resultante formateada sea como el resultado deseado? Si realizo más análisis en esta lista, necesito poder acceder fácilmente a los elementos.
Esta respuesta es similar a la aceptada, pero un poco menos intrincada.
L<-list()
for (i in 1:3) {
L<-c(L, list(list(sample(1:3))))
}
Existen otras dos soluciones que implican asignar un índice al final de la lista. Aquí hay una solución que sí utiliza append
.
resultsa <- list(1,2,3,4,5)
resultsb <- list(6,7,8,9,10)
resultsc <- list(11,12,13,14,15)
outlist <- list(resultsa)
outlist <- append(outlist, list(resultsb))
outlist <- append(outlist, list(resultsc))
que le da su formato solicitado
> str(outlist)
List of 3
$ :List of 5
..$ : num 1
..$ : num 2
..$ : num 3
..$ : num 4
..$ : num 5
$ :List of 5
..$ : num 6
..$ : num 7
..$ : num 8
..$ : num 9
..$ : num 10
$ :List of 5
..$ : num 11
..$ : num 12
..$ : num 13
..$ : num 14
..$ : num 15
Podría ser esto, lo que quieres tener:
# Initial list:
myList <- list()
# Now the new experiments
for(i in 1:3){
myList[[length(myList)+1]] <- list(sample(1:3))
}
myList
outlist <- list(resultsa)
outlist[2] <- list(resultsb)
outlist[3] <- list(resultsc)
El archivo de ayuda de append
dice que es para vectores. Pero puede usarse aquí. Pensé que lo había intentado antes, pero había algunas anomalías extrañas en el código del PO que pueden haberme confundido:
outlist <- list(resultsa)
outlist <- append(outlist,list(resultsb))
outlist <- append(outlist,list(resultsc))
Mismos resultados