R: matrix loop_help me loop через все строки моей матрицы.В настоящее время мой код перебирает одну колонку - PullRequest
1 голос
/ 13 июля 2011

У меня есть две матрицы, на которых я хочу выполнить цикл.Моя проблема в том, что я зацикливаюсь на одном столбце и не знаю, как включить другой столбец, поэтому мои неверные результаты.Мои коды следующие:

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 голосов
/ 13 июля 2011

Посмотрите на строку

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

Если вы дадите только один номер в индексе матрицы, он определит позицию, отсчитав первый столбец, затем второй и так далее.on.

То есть turn[1] относится к элементу в верхнем левом углу матрицы turn, а turn[2] относится к нижнему левому углу.

В вашем цикле i принимает значения 1:runs, а runs равно 2, поэтому вы присваиваете только первые два элемента turn.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...