2012-04-05 3 views
1

이 질문에 대한 만족스러운 답을 찾지 못했습니다. 내가 함수가 있다고 가정 :은 llply에 목록 인수를 전달합니다.

foo <- function(a,b,c) { 
... 
} 

a 많은 data.frame 객체

b을 포함하는 목록 (즉 어떤 도움이되는지 라이브러리 spatstat에서 클래스 ppp) 데이터의 특별한 클래스를 포함하는 목록입니다.

c은 정수입니다.

와 나는 그 함수를 통해 목록을 밀어 원하는 : b에서 목록 항목의

result <- llply(a, foo, b,c) 

이름은 목록 a에 data.frames의 열 "유형"에 해당합니다. 그래서 기능 foo 내부에서 나는 빨리 수행 할 수 있습니다

id <- which(names(b) == unique(a$type)) 
baseline_pattern <- b[[id]] 

는의 오른쪽 data.frame와 B의 각 기본 공간 패턴과 일치 할 수 있습니다. a에는 약 10 개의 항목과 1000 개의 항목이 있습니다. 불행하게도 llply (또는 일반적으로 lapply)은 하나의 목록 항목을 시간에 푸시하려고하기 때문에 작동하지 않습니다. 이는 인수 목록 b에 대해서도 올바른 코드가있는 b의 올바른 목록 항목과 일치하는 두 줄의 코드가 실패합니다. 함수는 더 이상 전체 목록을 가지고 있지 않습니다 b. 이 주위에 어떤 방법이 있습니까? 핀치

, I 각각의리스트 항목은 길이 2는 data.frame과 대응점 패턴 객체를 포함와리스트 자체이다 (효과적으로 ab 조합) 다른 목록을 만들 수있다. 그러나 이로 인해 1000s의 중복 사본이 생성됩니다 (클러스터에서이 작업을 훨씬 효율적으로 수행하지 못하게합니다).

업데이트 : 이것을 클러스터에서 실행하려면 mclapply으로 바꾸십시오. 나는 mapply으로 할 수 없다 (mcmapply이없는 한).

+0

R 2.15.0에는'mcmapply'가 있습니다. 업그레이드 시간 ...? –

답변

1

아직 완전히 깨어나지는 않았지만 mapplyMoreArgs=list(b, c)을 사용하려는 것 같습니다.