2011-07-13 17 views
1

私はループを実行したい2つの行列を持っています。私の問題は、私は1つのcolomnのためにループしているので、他の列、したがって私の間違った結果を含める方法を知らないです。私のコードは以下の通りです:R:行列loop_help私の行列のすべての行をループします。現在、私のコードは一つの行列をループしています

t=as.matrix(b) 
y=as.matrix(a) 
t 
      a  b 
     [1,] 1  10 
     [2,] NA  9 
     [3,] 3  NA 
     [4,] 4  7 
     [5,] 5  6 
     [6,] 3  4 

y 
       c  d 
     [1,] 3  12 
     [2,] NA  11 
     [3,] 5  NA 
     [4,] 6  9 
     [5,] 7  8 
     [6,] 3  12 

turn 
    [,1] [,2] 
[1,] 0  0 
[2,] 0  0 

コード:

n=3 #number to consider at a time 
runs=2 #total data points divided by 60 to the nearest whole number 
turn=matrix(0, nrow=runs,2) 
TR = y/t 

for (i in 1: runs){ 
    index_start=3*(i-1)+1 
    index_end= 3*i 
    turn[i]=mean(TR[index_start:index_end],na.rm=TRUE) 
} 



turn 
    [,1]  [,2] 
[1,] 2.333333 0 
[2,] 1.300000 0 

ターン出力は、第1列の正しい結果を与えたが、第二のカラムの期待、誤った結果としています。ループ機能を調整するにはどうすればよいですか?前もって感謝します。ラインで

答えて

3

ルック

turn[i]=mean(TR[index_start:index_end],na.rm=TRUE) 

あなただけの行列のインデックス内の単一番号を与えると、それはそうで、その後第2のダウン、最初の列をカウントダウンして位置をうまく、となります。

したがってturn[1]は、行列turnの左上隅にある要素を指し、turn[2]は、左下隅を指します。

i1:runsの値をとり、runsは2なので、turnの最初の2つの要素にのみ割り当てます。

+0

ありがとうございました。 – rder

+0

@rderこの回答があなたの問題を解決した場合は、スコアカウントの下にあるティックマーク(緑に変わるはずです)をクリックして「回答」をマークすることを検討してください。 –