2013-02-12 4 views
2

나는 게놈 데이터 집합 (약 56k 열)에서 시작 지점과 끝 지점을 모두 필요로하는 사용자 지정 임의 포리스트 기능으로 작업하고 있습니다.병렬 처리 R

열 번호를 하위 그룹으로 분할하고 각 하위 그룹을 개별적으로 처리하여 작업 속도를 높이고 싶습니다. 나는 다음과 같은 코드로이 (실패) 시도 :

library(foreach) 
library(doMC) 
foreach(startMrk=(markers$start), endMrk=(markers$end)) %dopar% 
    rfFunction(genoA,genoB,0.8,ntree=100,startMrk=startMrk,endMrk=endMrk) 
startMrk 숫자 변수의 배열입니다

: 1 4 8 12 16가와 endMrk 다른 배열이 예를 들어 3 7 11 15 19

, 나는 하나 개의 코어 싶어 샘플 1 : 3을 실행하고, 다른 것은 4 : 7을 실행합니다. R에서의 병렬 처리에 대한 아이디어가 새로 생겨서 사용할 수있는 모든 문서를 기꺼이 연구하려고합니다. 누구든지 병렬 처리 또는 위의 코드에서 누락 된 것에 대한 조언을 갖고 있습니까?

답변

1

여기에서 기본적인 사항은 열을 여러 조각으로 나누는 것입니다. 첫째, 각 반복에서 데이터 세트를 적절히 청크하여 청크를 RF에 공급하는 것이 더 나을 수도 있습니다. 또한, foreach는 단지 몇 가지 방법에 대한처럼 작동하므로 코드는

rfs=vector('list',4) 
foreach(i=1:4) %dopar% { 
    ind <- markers$start[i]:markers$end[i] 
    rfs[[i]] <- randomForest(genoA[,ind],genoB[,ind], 0.8, ntree=100) 
} 

내가 정기적으로 랜덤 포레스트이 준 될 수 있지만, 당신은 간단한 방식으로 사용자 지정 코드로이 작업을 마무리 할 수 ​​있습니다. 정확히 잘 작동하지 않았다

+0

,하지만 난 같은 것을 사용했을 때 'R <- foreach 문을 (I = 1 : 5, .combine = "cbind") % dopar % {랜덤 포레스트 (제노아, genoB, 0.835, ntree = 100, startMrk = 마커 $ start [i], endMrk = 마커 $ end [i])}' 나는 내가 원하는 것을 찾았습니다. 하나의 마지막 질문 : 내가 사용하는 사용자 지정 함수는 목록을 반환합니다. 목록의 요소를 선택적으로 결합하는 방법이 있습니까? 도움 주셔서 감사합니다. – trvrr

+0

조금 늦었지만 "최종 질문"에 대답하십시오. "목록의 요소를 선택적으로 결합하는 것"이 ​​아닌, 관심있는 목록 요소를 추출하지 않는 이유는 무엇입니까? 'foreach (...) % dopar % {return (list (A = ..., B = ...))}'; 시도해보십시오 :'foreach (...) % dopar % {res <- list (A = ..., B = ...); return (res $ A)}'. 또는 같은 일을하는 자신 만의'.combine' 함수를 정의하십시오. (첫 번째 옵션은 데이터가 덜 움직이는 결과를 가져 오며,'res $ B'가 큰 경우 중요합니다!) – dynamo