524个矩阵的列表,每个矩阵有2个冒号和可变行长度

时间:2014-03-21 15:06:14

标签: r loops matrix

我试图列出524个矩阵,每个矩阵有2个冒号和可变行长度

我尝试了以下代码:

> twna=list()
> for(j in 1:Insh){
+   t=matrix(ncol=2,nrow=Inevh-nan[j])
+   for(i in 1:Inevh){
+     if((is.na(rain[i,j])==F)){
+       t[i,1]=i
+       t[i,2]=rain[i,j]
+      
+     }   
+   } 
+   twna[j]=t
+ }

和R返回此错误代码:

[<-中的错误(*tmp*,i,1,值= 7337L):下标超出范围

2 个答案:

答案 0 :(得分:0)

在外部循环中,您创建一个带有Inevh-nan[j]行的矩阵t:

t=matrix(ncol=2,nrow=Inevh-nan[j])

在内循环中,循环遍历行1:Ineveh

for(i in 1:Inevh){...}

因此除非nan[j]==0用于所有j,否则最终会得到一个超出边界的下标错误。

答案 1 :(得分:0)

你应该替换

for(i in 1:Inevh){

for(i in 1:nrow(t)){

因为您将矩阵定义为行可能比Inevh少(或者您可以调整t的维度(顺便说一下矩阵变量的名称,以便采用转置)留下t(t)),以免减去nan[j]

在R没有内循环的情况下,可能有更惯用的方法:

t[,1] <- 1:Inevh
t[,2] <- rain[,j]
t[is.na(rain[,j]),] <- NA