2017-02-23 11 views
0

私が書いているコードでif文を実行しようとすると、難しい時があります。これはすべての行について真の値の数を分析しようとしています。スパース行列(マット)の行。 if文最初のためR-Markdown/Rコンソールのif文

Error: unexpected '=' in: 
" for (col in 0:cols){ 
     if (mat[row,col] =" 

counter=0 
geneCount=0 
columnIndex=-1 
cols=20 
rows=20 
for (col in 0:cols){ 
    columnIndex=columnIndex+1 
    for (row in 0:rows){ 
    for (col in 0:cols){ 
     if (mat[row,col] = TRUE){ 
     counter=counter+1 
     } 
     if(counter = 2){ 
     sigArray[columnIndex]=sigArray[columnIndex]+1 
     counter=0 
     next 
     } 
    } 
    } 
} 

は、私は、エラーメッセージが出続けます。私はdouble equalsを使用しようとしましたが、どちらもうまくいきませんでした。

ありがとうございました!

+2

代わりに '=='を試してみてください。単一の等号は( 'counter = 0'のように)代入として解釈されます。代わりに 'apply'関数ファミリーを使う考えですか? –

+0

行列が論理要素で構成されている場合は 'if(mat [row、col]){'もっと控えめにするために 'if(isTRUE(mat [row、col])){'を使うこともできます。 – lmo

答えて

1

少なくとも2つの問題があります。最初の問題は、あなたが思ったように、if文は論理テストであり、したがって等価テストの演算子が必要です。同等性をテストするには、==を使用する必要があります。 2番目の問題は、行と列のRインデックスがゼロではなく1で始まることです。したがって、実際にデータセットに21行と列があると仮定すると、0〜20のように構文を編集する必要があります。

counter=0 
geneCount=0 
columnIndex=0 
cols=21 
rows=21 
for (col in 1:cols){ 
    columnIndex=columnIndex+1 
    for (row in 1:rows){ 
    for (col in 1:cols){ 
     if (mat[row,col] == TRUE){ 
     counter=counter+1 
     } 
     if(counter == 2){ 
     sigArray[columnIndex]=sigArray[columnIndex]+1 
     counter=0 
     next 
     } 
    } 
    } 
}