R-矩阵中的循环 [英] R - Loop in matrix

查看:337
本文介绍了R-矩阵中的循环的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有两个变量,第一个是包含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

谢谢您的帮助.

解决方案

尝试一下:

# 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循环中为结果定义空矩阵的一种好习惯是,事先明确地为其指定正确的尺寸,这是为了使代码更有效.

I have two variables, the first is 1D flow vector containing 230 data and the second is 2D temperature matrix (230*44219).

I am trying to find the correlation matrix between each flow value and corresponding 44219 temperature. This is my code below.

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

The error message always says:

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

Thank you for your help.

解决方案

try this:

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

The two redefinitions inside your loop were superfluous I believe. The main problem with your code was not defining the matrix - i.e. the cor variable did not have 2 dimensions, hence the error. It is apparently also good practice to define empty matrices for results in for-loops by explicitly giving them correct dimensions in advance - is meant to make the code more efficient.

这篇关于R-矩阵中的循环的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆