Czy istnieje łatwy sposób (tj. Funkcja) do określenia poziomu zagnieżdżenia na liście? Wiem, że istnieje str
, za pomocą którego można uzyskać te informacje. Ale czy jest coś, co po prostu daje wynik? Czy mogę użyć takiej funkcji, aby uzyskać nazwy wszystkich poziomów alist (rekursywnie)?Ustal poziom zagnieżdżenia w R?
8
A
Odpowiedz
10
Trochę funkcja rekurencyjna może zrobić dla Ciebie:
depth <- function(this,thisdepth=0){
if(!is.list(this)){
return(thisdepth)
}else{
return(max(unlist(lapply(this,depth,thisdepth=thisdepth+1))))
}
}
Jeśli masz dostał package:testthat
, oto zestaw testowy:
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)
Przeprosiny za korzystanie Lowe r-case L w nazwach zmiennych. Czytelność nie działa.
2
Jeśli wszystkie elementy są nazywane, można użyć tego (z kodem 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
Możesz teraz użyć depth()
z pakietu purrr
!
Uwaga: obecnie funkcja jest częścią wersji rozwojowej purrr
ale staną się częścią oficjalnej wersji CRAN gdy pakiet zostanie wersja wpadać
Powiązane problemy
- 1. Maksymalny poziom zagnieżdżenia funkcji "100" osiągnięty, przerwanie
- 2. Błąd PHP: Maksymalny poziom zagnieżdżenia funkcji równy "100" osiągnięty, przerwanie
- 3. Sonata: Fatal error: Maksymalny poziom zagnieżdżenia funkcji z '100' osiągnął .. podczas osadzania formy
- 4. Xdebug - zmiana poziomu zagnieżdżenia var_dump
- 5. Tomcat 7 zagnieżdżenia CombinedRealm, LockoutRealm i DataSourceRealm
- 6. Ustal kliknięciu kolumny w ListView
- 7. Poziom wcięcia w xmllint
- 8. Standardy HTML5 zagnieżdżenia div w li lub dl
- 9. Ustal, która wersja OpenCV
- 10. Ustal, kto oddał wydarzenie
- 11. System.Web.Cache, poziom sesji lub poziom aplikacji
- 12. Ustaw poziom powiększenia w Vis.js
- 13. Ustawienie Poziom zaufania w web.config
- 14. Ustal min i max w gnuplot
- 15. Ustal, czy podgląd jest widoczny w UIScrollView
- 16. Ustal bieżącego użytkownika w Apps Script
- 17. Ustal, czy typ jest statyczny.
- 18. Ustal między gniazdem a fd
- 19. Clojure: ustal, czy istnieje funkcja
- 20. Ustal, czy nastąpiła zmiana dzienna
- 21. konstrukcyjne Dokumenty (poziom wysoki i niski poziom konstrukcyjne dokumenty)
- 22. Poziom głośności iPoda wpływa na poziom głośności aplikacji
- 23. Android: wykryj poziom dźwięku
- 24. niski poziom Hooker
- 25. jak zmienić poziom izolacji?
- 26. Poziom rejestrowania Liferay
- 27. Wykryj poziom zaufania
- 28. Grails: poziom Enterprise Grails
- 29. AutoMapper - odwzorowanie poziom Głębokie
- 30. poziom ostrzegawczy nvcc
Można spróbować 's <- (capture.output (str (mylist, nest.lev = 1)) [- 1]) ', a następnie użyj przetwarzania ciągów, aby przechwycić liczbę' ..', które rozpoczynają każdy element 's'. (Jeśli dostanę 10 minut później i nie otrzymam lepszej odpowiedzi, to sam sobie to zrobię.) –