Esiste un modo semplice (ad esempio una funzione) per determinare il livello di annidamento nell'elenco? So che c'è lo str
che può essere usato per ottenere queste informazioni. Ma c'è qualcosa che restituisce semplicemente il risultato? E posso usare questa funzione per ottenere i nomi di tutti i livelli di alist (in modo ricorsivo)?Determina il livello di nidificazione in R?
8
A
risposta
10
Un po funzione ricorsiva può fare questo per voi:
depth <- function(this,thisdepth=0){
if(!is.list(this)){
return(thisdepth)
}else{
return(max(unlist(lapply(this,depth,thisdepth=thisdepth+1))))
}
}
Se hai ha package:testthat
, ecco una serie di test:
l1=list(1,2,3)
l2=list(1,2,l1,4)
l3=list(1,l1,l2,5)
require(testthat)
expect_equal(depth(l1),1)
expect_equal(depth(l2),2)
expect_equal(depth(l3),3)
Ci scusiamo per l'utilizzo di Lowe r-case L nei nomi delle variabili. Fallimento della leggibilità.
2
Se tutti gli elementi sono chiamati, si potrebbe usare questo (dal codice di unlist
):
mylist <- list(a=list(x=1),b=list(c=list(y=c(2,3)),d=c("a","b")))
names(.Internal(unlist(mylist, TRUE, TRUE)))
#[1] "a.x" "b.c.y1" "b.c.y2" "b.d1" "b.d2"
0
Ora è possibile utilizzare depth()
dal pacchetto purrr
!
Nota: attualmente la funzione fa parte della versione di sviluppo di purrr
ma entreranno a far parte della versione ufficiale CRAN volta che il pacchetto ottiene una versione urto
Problemi correlati
- 1. Dispositivi di output di nidificazione in R?
- 2. Xdebug - modifica var_dump livello di nidificazione
- 3. Come si determina l'autore di un pacchetto R?
- 4. Nidificazione di query in SQL
- 5. Cosa determina la dimensione di un oggetto salvato in R?
- 6. funzioni di nidificazione in PHP
- 7. Errore PHP: raggiunto il livello massimo di nidificazione delle funzioni di "100", interruzione
- 8. alias nidificazione in C#
- 9. Determina programmatore di dominio corrente a livello di programmazione
- 10. Come risolvere laravel 5.2 questo errore "Raggiunto il livello di nidificazione della funzione '100', interrotto!"?
- 11. Determina la velocità su Internet a livello di programmazione
- 12. Qual è il limite di nidificazione dei moduli in Powershell
- 13. Nidificazione con tre livelli di quotazioni
- 14. Strutture di nidificazione con Datomic
- 15. Funzioni di nidificazione Lambda - Implicazioni sulle prestazioni
- 16. usa & try/catch nidificazione
- 17. nidificazione con namedtuple
- 18. Determina il supporto del processore per SSE2?
- 19. determina il tipo di scheda di Arduino
- 20. Determina il nome del dominio in JavaScript?
- 21. Determina il dispositivo del filesystem in Python
- 22. Sass nth-child nidificazione
- 23. Determina il numero di versioni nella cronologia del pacchetto R su CRAN
- 24. Sonata: Fatal error: Livello massimo la funzione di nidificazione del '100' ha raggiunto .. quando forme incorporamento
- 25. d3 clic e evento di trascinamento nidificazione
- 26. Nidificazione classi CSS
- 27. Come modificare la risoluzione di un livello raster in R
- 28. Determina il tipo di contenuto richiesto?
- 29. Nidificazione di # /% nelle macro di clojure
- 30. Determina il tipo di dati di una colonna in SQLite
Si potrebbe provare 's <- (capture.output (str (mylist, nest.lev = 1)) [- 1]) 'e quindi usa l'elaborazione della stringa per catturare il numero di' ..'s che inizia ogni elemento di 's'. (Se ottengo 10 minuti più tardi e non c'è risposta migliore per allora, me ne occuperò io stesso.) –