2012-01-29 154 views
0

我有两个变量,第一个是包含230个数据的一维流向量,第二个是二维温度矩阵(230 * 44219)。R - 矩阵中的回路

我想找到每个流量值和相应的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 

谢谢您的帮助。

回答

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

两个您的循环内的重新定义是多余的,我相信。你的代码的主要问题是没有定义矩阵 - 即cor变量没有2维,因此是错误。 通过预先明确地给出正确的尺寸来定义for循环中的结果的空矩阵显然也是一种很好的做法 - 旨在使代码更高效。

+0

不要使用':'运算符也是一个好习惯:考虑如果你传递一个零行或列的矩阵会发生什么。相反,使用'seq_len(nrow(*))'和'seq_len(ncol(*))'。 – 2012-01-29 23:30:14

+0

感谢您的帮助。代码仍然是加载3分钟,我希望会有任何麻烦。 – 2012-01-30 02:14:54