2016-10-03 6 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)ステートメント返さ可変 RES
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代わりのprint(a)

res = foreach(SNP=1:ncol(snpchunk), .combine='cbind') %dopar% 
{ 
    a = snpchunk[,SNP] 
    a[a==2] <- 1 
    a 
}   
を使うべき理由である1を返します。削除した場合
関連する問題