0

我对 R 比较陌生,尽管我已经完成了大量简单的 R 编程。我认为这应该是一个简单的问题,但我似乎无法弄清楚。

更新:

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

Xi (3 xk)、yi (3 x 1) 和 Om3 (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 和近江对面

很抱歉这篇长篇文章试图彻底,任何建议将不胜感激

4

1 回答 1

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) , ]
于 2013-01-21T18:42:18.977 回答