0

2つの変数があります。1つは230データを含む1Dフローベクトルで、もう1つは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

ご協力ありがとうございました。

4

1 に答える 1

0

これを試して:

# 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]) 
   }
}

あなたのループ内の2つの再定義は不必要だったと私は信じています。コードの主な問題は、行列を定義していないことでした。つまり、cor変数に2次元がなかったため、エラーが発生しました。forループの結果に対して、事前に正しい次元を明示的に指定して空の行列を定義することも、明らかに良い習慣です。これは、コードをより効率的にすることを目的としています。

于 2012-01-29T23:04:27.500 に答える