您試圖暗示這一點的方式存在很多問題。首先,它有助於使可再生的例子:
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