您试图暗示这一点的方式存在很多问题。首先,它有助于使可再生的例子:
original.matrix <- matrix(1:(320*25), nrow=320, ncol=25)
第二,如果你要使用一个for循环,你需要初始化一个对象来保存结果:
helping.matrix <- matrix(nrow=64, ncol=25)
OK,现在让我们来看看你的代码。
for (x in c(1:64)){
helping.matrix[x,] = colSums(original.matrix[((5*(x-1)+1):5*x),])/
这里的索引表达式是相当狂野,你想让它什么不做。例如,当x = 2时,(5*(x-1)+1):5*x
= 12,10。这与您陈述的目标不符。在x = 9时,表达式返回的值大于original.matrix中的行数,这就是为什么出现“越界”错误的原因。当我们到达
vector[((5*(x-1)+1):5*x)])
在这里,你正试图指数vector
,就好像是一个数据对象的下一个问题occures。但是vector不是数据对象,它是一个函数。也许你想c((5*(x-1)+1):5*x)
?无论如何,从你的问题来看,并不清楚这个代码组的意图是什么,所以我不能在这里提供很多建议。
好吧,让我们重新开始。我想解决这个问题的方法是通过使这对你想你的求和函数应用到组映射索引向量:
groups <- rep(1:(320/5), each=5)
接下来,使用循环或申请家庭功能遍历组。 for循环的做法看起来像
helping.matrix <- matrix(nrow=64, ncol=25)
for(i in unique(groups)) {
helping.matrix[i,] <- colSums(original.matrix[groups == i,])
}
和应用为基础的方法看起来就像
helping.matrix <- Reduce(rbind, by(original.matrix, groups, colSums))
我已经离开了那就是“通过一定的载体标准化”应该部分因为我不清楚实际应该发生的事情。
比我原先想象的要简单! – DonC 2011-05-06 17:14:03