Supponiamo di avere un elenco nidificato:R: Sostituire valori in lista annidata
test <- list(
list(a = 1, b = 2, c = NULL),
list(a = NULL, b = 2, c = 3))
Come faccio a sostituire tutti i valori NULL
con, diciamo, NA
per preservare la struttura dei dati? In modo che non finisca per perdere valori/struttura quando tento di rendere i dati fuori dalla lista. Come ad esempio:
data.frame(matrix(unlist(test), nrow = 2, byrow = T))
X1 X2
1 1 2
2 2 3
output desiderato è qualcosa di simile:
X1 X2 X3
1 1 2 NA
2 NA 2 3
ci sono suggerimenti da fare in questo modo:
rbind.fill(lapply(test, function(f) {
as.data.frame(Filter(Negate(is.null), f))
}))
Il che non è proprio come vettorializzare come vorrei . Ovviamente le dimensioni e le prestazioni sono un problema. Una soluzione che ricorda è la sostituzione di tutti i valori NULL allo stesso modo in cui può essere fatto per l'intero frame di dati in una sola volta. E poi unlist()
e matrix()
l'elenco.
Non sono sicuro del guadagno nella prestazione (se ce n'è affatto). Forse il buon vecchio lapply()
non è poi così male.
Per sostituire i valori NULL nell'intero elenco, dobbiamo accedere agli elementi all'interno. Usando 'data.table 1.9.5' puoi usare' rbindlist (lapply (....), fill = TRUE) 'nel tuo codice aggiornato. – akrun
.. che richiede lapply e praticamente termina con le stesse prestazioni della tua risposta originale? –
Non ho controllato i benchmark, ma penso che rbindlist sarebbe più veloce. – akrun