我试图列出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):下标超出范围
答案 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