从更大的矩阵创建许多新矩阵

时间:2013-01-21 17:58:28

标签: r loops matrix

我是R的新手,虽然我做了很多简单的R编程。我认为这应该是一个简单的问题,但我似乎无法弄明白。

更新:

由于我的计算机存在内存限制,我需要将数据分段以进行回归分析。我基本上有三个相关的矩阵称为X(n x k),y(n x 1)和Om(n x n)我需要将这三个矩阵按行以各种方式将它们相乘,然后将结果相加。由于Om的错误结构,一些组必须是3行,其他行为2,其他行为1.对于一组3,我们将有:

Xi(3 x k),yi(3 x 1)和Om 3(3 x 3)

我已经在R

中构建了Om1,Om2和Om3
Om1<-matrix(2)

vec1<-c(2,-1)
vec2<-c(-1,2)
Om2<-rbind(vec1,vec2)

vec3<-c(2,-1,0)
vec4<-c(-1,2,-1)
vec5<-c(0,-1,2)
Om3<-rbind(vec3,vec4, vec5)

现在问题是如何分解X和y以便我可以匹配X,y和Om的行。我以为我需要一个循环,但不能让它像以下那样工作:

for(i in 1:280){
  assign(paste("xh", i, sep = ""), i)    
}
for(i in 1:145){
  xhi<- X[i,] 
}
for(i in 146:195){
  xhi<-X[ seq( from=i , length=2) , ]
}

for(i in 196:280){
  xhi<-X[ seq( from=(i+49) , length=3) , ]
}

如果第一个145 xi对应于Om1,那么下一个50 xi对应于Om2 ......我想我需要一种方法来索引它们,这与我最终需要总结一个xi的产品相同,yi和Omi穿过我的

对于试图彻底的长篇文章感到抱歉,任何建议都将不胜感激

1 个答案:

答案 0 :(得分:1)

假设这个矩阵名为mtx,你想要10个增加行数的矩阵,并且它至少有55行,因为每次迭代增长1的长度之和为n(n 1)/ 2:

mlist <- list()
for (x in 1:10) mlist[[x]] <-mtx[ seq( from=x*(x-1)/2+1 , length=x) , ]

如果愿意像卡尔所说的那样:

mlist <- list()
for (x in 1:10) mlist[[x]] <-mtx[ seq( from=1 , length=x) , ]

或者:

mlist <- list()
for (x in 1:10) mlist[[x]] <-mtx[ seq( from=x , length=2) , ]