R - петля в матрице - PullRequest
       16

R - петля в матрице

0 голосов
/ 30 января 2012

У меня есть две переменные, первая - это 1D-вектор потока, содержащий 230 данных, а вторая - 2D-матрица температуры (230 * 44219).

Я пытаюсь найти матрицу корреляции между каждым значением потока и соответствующей температурой 44219. Это мой код ниже.

Houlgrave_flow_1981_2000 = window(Houlgrave_flow_average, start = as.Date("1981-11-15"),end = as.Date("2000-12-15")) 

> str(Houlgrave_flow_1981_2000)
‘zoo’ series from 1981-11-15 to 2000-12-15
Data: num [1:230] 0.085689 0.021437 0.000705 0 0.006969 ...
Index:  Date[1:230], format: "1981-11-15" "1981-12-15" "1982-01-15" "1982-02-15" ...

Hulgrave_SST_1981_2000=X_sst[1:230,]

> str(Hulgrave_SST_1981_2000)
num [1:230, 1:44219] -0.0733 0.432 0.2783 -0.1989 0.1028 ...

sf_Houlgrave_SF_SST = NULL
sst_Houlgrave_SF_SST = NULL
cor_Houlgrave_SF_SST = NULL
for (i in 1:230) {
     for(j in 1:44219){
          sf_Houlgrave_SF_SST[i] =  Houlgrave_flow_1981_2000[i]
          sst_Houlgrave_SF_SST[i,j] = Hulgrave_SST_1981_2000[i,j]
          cor_Houlgrave_SF_SST[i,j] = cor(sf_Houlgrave_SF_SST[i],Hulgrave_SST_1981_2000[i,j]) 
     }
}

Сообщение об ошибке всегда гласит:

Error in sst_Houlgrave_SF_SST[i, j] = Hulgrave_SST_1981_2000[i, j] : 
  incorrect number of subscripts on matrix

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 30 января 2012

попробуйте это:

# prepare empty matrix of correct size
cor_Houlgrave_SF_SST <- matrix(nrow=dim(Hulgrave_SST_1981_2000)[1],
                              ncol=dim(Hulgrave_SST_1981_2000)[2])

# Good practice to not specify "230" or "44219" directly, instead
for (i in 1:dim(Hulgrave_SST_1981_2000)[1]) {
  for(j in 1:dim(Hulgrave_SST_1981_2000)[2]){
     cor_Houlgrave_SF_SST[i,j] <- cor(sf_Houlgrave_SF_SST[i],Hulgrave_SST_1981_2000[i,j]) 
   }
}

Я считаю, что два переопределения внутри вашего цикла были излишними.Основной проблемой в вашем коде было не определение матрицы - то есть переменная cor не имела 2 измерений, следовательно, ошибка.Очевидно также, что хорошей практикой является определение пустых матриц для результатов в циклах for путем явного предоставления им правильных измерений заранее - это должно сделать код более эффективным.

...