2016-10-03 4 views
1

0,1,2 값을 포함하는 큰 행렬을 수정하고 2를 1로 바꾸려고합니다. 행렬에 500.000 열과 7000 행이 포함되어 있습니다. 데이터는 이미 50 행만큼 읽혀졌고 이제는 foreach() % dopar %를 사용하여 블록 및 다중 스레드로 나누기를 원합니다.R 병렬로 수행

> SNPchunk 
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] 
[1,] 0 0 0 0 1 0 0 2  
[2,] 1 0 1 0 1 1 1 0  
[3,] 1 0 1 0 1 1 0 1 
[4,] 0 0 0 0 1 0 0 2  
[5,] 0 0 0 0 2 0 2 1  
[6,] 0 0 0 0 0 0 0 1 
[7,] 0 0 0 0 1 0 0 2 
[8,] 0 0 0 0 2 0 1 1 
[9,] 1 1 1 0 1 1 0 1 
[10,] 0 0 0 0 1 0 1 1  
잉크 (a) 문 리턴 변수 입술
chunk = foreach (part = 1:snpsplit) %do% 
{ 
    snpchunk = SNPcomponents[,snp.start[part]:snp.stop[part]] 

    #print(part) 

    res = foreach(SNP=1:ncol(snpchunk), .combine='cbind') %dopar% 
    { 
     a = snpchunk[,SNP] 
     a[a==2] <- 1 
     print(a) 
    }   
} 

는 1S 대체 모두 2S로하여 X N의 행렬이다. 내가 첫 번째 결과를 얻는 방법에만 값 1

>res 
result.1 result.2 result.3 result.4 result.5 result.6 result.7 result.8 
    1  1  1  1  1  1  1  1 

를 포함하는 X 1의 매트릭스가 반환 된 변수 고해상도 인쇄 (A) 문이없는 그러나

 result.1 result.2 result.3 result.4 result.5 result.6 result.7 result.8 [1,] 0 1 1 1 0 1 1 1 [2,] 0 0 0 0 0 0 0 0 [3,] 1 0 0 0 0 0 0 0 [4,] 0 0 0 0 0 0 1 1 [5,] 0 1 1 1 0 0 1 1 [6,] 1 0 1 1 0 1 1 1 [7,] 0 1 1 1 0 0 1 1 [8,] 0 1 0 0 1 1 1 1 [9,] 0 0 0 0 0 0 0 0 [10,] 1 1 0 0 0 0 0 1 

print 문을 사용하지 않고?

도움 주셔서 감사합니다. J.

답변

0

완전히 print(a)a[a==2] <- 1 라인 대신의 a를 사용해야하는 이유 즉 1을 반환 제거하면 print(a)

res = foreach(SNP=1:ncol(snpchunk), .combine='cbind') %dopar% 
{ 
    a = snpchunk[,SNP] 
    a[a==2] <- 1 
    a 
}   
관련 문제