2012-11-19 5 views
4

또는 다르게 입력하십시오. 중첩 목록에 [[ 연산자를 사용하려면 어떻게해야합니까?특정 중첩 수준에서 목록의 모든 요소를 ​​선택하는 방법은 무엇입니까?

목록의 깊이 수준을 결정하는 방법을 물어볼 때 one에 대한 후속 질문으로 간주 할 수 있습니다. @Spacedman과 @flodel에서 누가 재귀 함수를 제안했는지에 대한 답변을 얻었습니다. 두 솔루션 모두 상당히 비슷하고 나를 위해 일했습니다.

그러나이 기능에서 얻은 정보로 무엇을해야하는지 아직 알지 못했습니다.

myList$firstLevel$secondLevel$thirdLevel$fourthLevel 
# fourthLevel contains 5 data.frames and thirdLevel has 
# three elements 

가 어떻게 mylist에서 다시 모든 15 data.frames를 얻을 수 있습니다 :의 나는 수준 i에서 중첩 된 목록을 가지고 있고이 같은 모든 i-th 레벨 요소를 포함하는 목록을 다시 취득하고 싶은 말은하자? 예 :

lapply(mylist,"[[",2) 

그러나 분명히 나는 ​​첫 번째 수준에서 모든 목록 요소의 두 번째 요소를 얻습니다.

편집 : 나는 extract respectivel ?"[["의 도움으로 다음하지만 정말 지금까지 주위에 내 머리를 정리 할 수 ​​발견 : "[[ can be applied recursively to lists, so that if the single index i is a vector of length p, alist[[i]] is equivalent to alist[[i1]]...[[ip]] providing all but the final indexing results in a list."

편집 : 이 같은 루프를 중첩 끝내고 싶지 않아 .

o <- list() 
i=1 
for (i in 1:2){ 
o[[i]] <- mylist[[c(i,1,1,1)]] 
} 
+4

이것은 mylist [[c (1,2)]]가'mylist'의 첫 번째 요소의 두 번째 요소를 얻을 수 있음을 의미합니다. –

+0

감사합니다. Romain, 실제로이 방법을 사용하면 매우 높은 수준의 최대 값을 결정한 다음 루프를 반복 할 수 있습니다. 그래서 다음 단계가 될 것입니다 : 재귀 적으로 내 목록의 길이를 찾는 방법? –

+0

각 레벨의 길이 또는 가장 낮은 레벨의 목록 요소의 길이를 묻는 중입니까? –

답변

0

그동안 답변을 찾았습니다. 내가 혼자서 해냈다는 말은 할 수 없다. 이 link은 다른 (복잡한) 재귀 함수를 사용하여 전체 중첩 목록을 선형화하는 방법을 자세히 설명합니다.

Akhil S. Behl이 제공하는 솔루션에 대한 좋은 점은 data.frames도 목록이며 recursing이 data.frames 앞에 멈출 수 있다는 사실입니다. 이것은 이전에 저의 주요한 문제 중 하나였습니다.

+0

비슷한 문제에 대한 해결책을 찾고 있었는데이 질문이 유망하다고 생각됩니다. 안타깝게도 솔루션에 대한 링크가 더 이상 작동하지 않습니다. 이것이 외부 링크 사용을 권장하지 않는 이유입니다. – arielf

+0

@arielf 외부 링크에 대해 죄송합니다. 루키의 실수라고 생각해.오래 동안했지만 저는 오래된 프로젝트 인 https://github.com/mbannert/gateveys2에서 akhil의 코드를 사용했다고 생각합니다. 그렇다면 나는 그에게 코멘트에 신용을 주었고 그의 이름은 쉽게 찾을 수 있어야한다. Hth –

+0

고마워, 새로운 참조 주셔서 감사합니다 – arielf

관련 문제