R - Loop in matrix

匿名 (未验证) 提交于 2019-12-03 01:41:02

问题:

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.

回答1:

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 - Loop in matrix
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!