목록에서 중첩 수준을 결정하는 쉬운 방법 (즉, 함수)이 있습니까? 이 정보를 얻는 데 사용할 수있는 str
을 알고 있습니다. 그러나 결과를 단순히 되돌려주는 것이 있습니까? 그리고 그러한 함수를 사용하여 모든 수준의 alist (재귀 적으로)의 이름을 얻을 수 있습니까? 모든 요소의 이름을 지정하는 경우R에서 중첩 수준을 결정 하시겠습니까?
8
A
답변
10
약간의 재귀 함수가 당신을 위해이 작업을 수행 할 수 있습니다
depth <- function(this,thisdepth=0){
if(!is.list(this)){
return(thisdepth)
}else{
return(max(unlist(lapply(this,depth,thisdepth=thisdepth+1))))
}
}
당신이 한 경우 로우를 사용하는
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)
사과 : package:testthat
있어, 여기에 테스트 세트입니다 변수 이름에 r-case L. 가독성이 떨어집니다.
2
, 당신은 (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
purrr
패키지의 depth()
을 사용할 수 있습니다!
참고 : 현재 함수가 purrr
의 개발 버전의 일부이지만 버전의 <
관련 문제
- 1. 동일한 디렉토리의 파일을 포함하려면 R에서 현재 파일의 위치를 결정 하시겠습니까?
- 2. HAML을 위해 엄격한 중첩 수준을 사용해야합니까?
- 3. 스프링 빈에 사용할 수있는 속성을 결정 하시겠습니까?
- 4. 현재 HINSTANCE를 결정 하시겠습니까?
- 5. 레포 크기를 결정 하시겠습니까?
- 6. 항목이있는 페이지를 결정 하시겠습니까?
- 7. StreamReader에서 콘텐츠를 결정 하시겠습니까?
- 8. R에서 의사 결정 나무에서 통계 테스트 실행 Weka 작성
- 9. 아파치 공유 로깅의 로깅 수준을 조정 하시겠습니까?
- 10. 핸들러 또는 로거에서 로깅 수준을 설정 하시겠습니까?
- 11. + 키를 누르는 방법을 결정 하시겠습니까?
- 12. 현재 MM 기간을 결정 하시겠습니까?
- 13. 오디오 녹음 길이를 결정 하시겠습니까?
- 14. WordPress로 jQuery의 버전을 결정 하시겠습니까?
- 15. DOM 요소의 문서를 결정 하시겠습니까?
- 16. GIF 애니메이션 상태를 결정 하시겠습니까?
- 17. Mercurial에서 '활성'변경 집합을 결정 하시겠습니까?
- 18. Scala에서 R을 사용하고 R에서 Scala를 호출 하시겠습니까?
- 19. R에서 겹치는 문자열에서 중복을 올바르게 제거 하시겠습니까?
- 20. pyplot 객체에 알파 채널을 설정 하시겠습니까? R에서
- 21. 중첩 세 가지 수준을 데이터 바인딩하는 방법 중계기
- 22. R에서 중첩 된 for 루프를 용이하게하는 방법은 무엇입니까?
- 23. IFRAME에서 현재 마우스 위치를 결정 하시겠습니까?
- 24. 어떤 비주얼 스타일이 사용되는 지 결정 하시겠습니까?
- 25. BLOB에서 이미지의 MIME 유형을 결정 하시겠습니까?
- 26. 파이썬 : 문자열 형식을 부울로 결정 하시겠습니까?
- 27. 시작시 Winforms 또는 Wpf를 동적으로 결정 하시겠습니까?
- 28. LayoutUpdate/ArrangeOverride가 발생하게 된 원인을 결정 하시겠습니까?
- 29. 클래스가 사용하는 메모리 양을 결정 하시겠습니까?
- 30. Android : 앱이 배터리를 소모하는 위치를 결정 하시겠습니까?
당신은'시도 할 수 범프됩니다 패키지 번 공식 크랑 버전의 일부가 될 것입니다 - (capture.output (str (mylist, nest.lev = 1)) [- 1])'문자열 처리를 사용하여's'의 각 원소를 시작하는'..'의 수를 잡아냅니다. (10 분 후에 더 좋은 대답이 나오지 않으면 나에게 직접 그 기회를 줄 것이다.) –