no estoy seguro de lo que quiere decir con "una función de acceso a cada lista individual", pero esto es bastante sencillo utilizando "lapply" y "do.call ('rbind', ...)":
No pude cargar su.rdata archivo, por lo que este código funciona para la lista:
ul <- list(param = list(
c(name = "Section", value = "1"),
c(name = "field", value = "1"),
c(name = "final answer", value = "1"),
c(name = "points", value = "-0.0")),
param = list(
c(name = "Section", value = "1"),
c(name = "field", value = "2"),
c(name = "final answer", value = "1"),
c(name = "points", value = "1.0")))
Es posible que tenga que ajustar los detalles si su lista es diferente; el director general seguirá siendo el mismo. Para mantener el código limpio, definamos la función 'extractitem' que va a extraer todos los nombres o valores para ul [[1]], ul [[2]], etc. Esta función es un poco más general que necesitas.
extractitem <- function(listelement, item)
unname(lapply(listelement, function(itemblock) itemblock[item]))
Ahora vamos a utilizar simplemente aplicar para caminar a través de elemento ul por elemento; para cada elemento, extraemos los valores en un marco de datos, luego nombramos las columnas de acuerdo con los 'nombres'.
rowlist <- lapply(ul, function(listelement) {
d <- data.frame(extractitem(listelement, "value"), stringsAsFactors = FALSE)
names(d) <- unlist(extractitem(listelement, "name"))
d
})
lista de filas ahora es una lista de marcos de datos; podemos consolidarlos en un único marco de datos con 'rbind'. Lo bueno de utilizar marcos de datos en el paso anterior (a diferencia de vectores o algo con sobrecarga) es que rbind reordenará las columnas si es necesario, por lo que si el orden de los campos cambia de elemento a elemento, todavía somos todos derecho.
finaldf <- do.call("rbind", rowlist)
Todavía tenemos que cambiar los elementos fo finaldf de "carácter" a lo que es apropiado para su aplicación a través de, por ejemplo,
finaldf$points <- as.numeric(finaldf$points)
y así sucesivamente. El último paso se limpia la trama de datos por extracción de los nombres de las filas generadas automáticamente:
rownames(finaldf) <- NULL
En caso de tener que modificar las cosas, la idea general es escribir una función que va a dar formato a cada ul [[i]] como un marco de datos con los nombres de columna correctos; luego invoque esa función en cada elemento de ul con lapply; y finalmente colapsar la lista resultante con do.call ("rbind", ...).
Gracias por el enlace, yo no era consciente de ello cuando hice la pregunta. – Emer
¡De nada! – rafaelvalle