2014-05-20 3 views
10

나는 그 안에리스트를 담고있는리스트를 가지고있다 (일반화 된 선형 모델 출력). 각 목록에서 여러 요소를 추출한 다음 그 결과를 데이터 프레임으로 결합하는 함수를 작성하려고합니다.R의 목록 목록에서 요소를 추출하려면 어떻게해야합니까?

나는 등, modelset[[1]]$likelihood & modelset[[1]]$fixef, modelset[[2]]$likelihood & modelset[[2]]$fixef 추출 및 데이터 프레임에 결과를 결합하려는.

다른 사람이 나에게이 작업을 수행하는 방법에 대한 아이디어를 줄 수 있습니까?

내 질문에 혼란을 겪는다면 사과드립니다. 내가하려는 것은 제한된 프로그래밍 이해를 넘어선 것입니다. 내 목록에 대한

추가 정보 :

당신이 목록의 요소에 액세스 할 수 ['…'] 대신 $…로 사용할 수 있습니다 (하지만 당신이 대신 다시 목록을 얻을 것이라는 점을 이해할 필요가 우아하게이 문제를 해결하기 위해
modelset: Large list (16 elements, 7.3Mb) 
    :List of 29 
    ..$ fixef   : Named num [1:2] -1.236 -0.611 
    .. ..- attr(*, "names")= chr [1:2] "(Intercept)" "SMIstd" 
    ..$ likelihood  :List of 4 
    .. ..$ hlik: num 238 
    .. ..$ pvh : num 256 
    .. ..$ pbvh: num 260 
    .. ..$ cAIC: num 567 

    ...etc 
+1

'lapply (modelset, "[", "likelihood")'등 ... –

답변

29

개별 요소).

그래서 당신은 요소 likelihoodfixef을 얻으려면, 당신은 쓸 수 있습니다 :

modelset[[1]][c('likelihood', 'fixef')] 

지금 당신이 modelset의 각 요소에 대해 그렇게하고 싶다.

lapply(modelset, function (x) x[c('likelihood', 'fixef')]) 

이 작동하지만, 매우 R-같은이 아니다 : 그것은 lapply가하는 일입니다.

R에서는 거의 이 표시됩니다.은 기능입니다. […][이라는 함수를 호출합니다 (그러나 [은 R의 특수 기호이므로 백틱으로 인용해야 함 : `[`). 그래서 다음과 같이 쓸 수 있습니다 :

lapply(modelset, function (x) `[`(c('likelihood', 'fixef')]) 

와우, 그건 전혀 읽을 수 없어요. 그러나, 우리는 지금, function (x) 익명의 포장을 제거 할 수 있습니다 내부에 있기 때문에 우리는 또 다른 함수를 호출하고 있으며, lapply의 마지막 매개 변수에 추가 인수를 이동 :

lapply(modelset, `[`, c('likelihood', 'fixef')) 

이 작동하고 우아한 R 코드입니다.


우리가 여기서 한 일을 다시 살펴 보겠습니다. 실제로, 우리는이처럼 보였다 표현했다 :

lapply(some_list, function (x) f(x, y)) 

을 그리고이 호출 대신 somelist = modelset, f = `[`y = c('likelihood', 'fixef')와 함께, 우리는 정확하게했다

lapply(some_list, f, y) 

과 같이 쓸 수있다.

+3

이 같은 답답한 대답을 찾는 것은 쉽지 않습니다. 고맙습니다. –

+0

매우 유용한 답변과 설명에 감사드립니다. – Akos

관련 문제