R - 应用于递增子矩阵,而不是单个 rows/cols

R - apply over increasing submatrices, instead of individual rows/cols

所以我一直在思考如何在没有 for 循环的情况下做到这一点,但我想不出一个好的答案。这是我的意思的一个例子:

sampleData <- matrix(rnorm(25,0,1),5,5)
meanVec <- vector(length=length(sampleData[,1]))

for(i in 1:length(sampleData[,1])){
        subMat <- sampleData[1:i,]
        ifelse( i == 1 , sumVec <- sum(subMat) ,sumVec <- apply(subMat,2,sum) )
        meanVec[i] <- mean(sumVec)
    }
meanVec

我要执行此操作的实际矩阵相当大,老实说,对于此应用程序,它不会在速度上产生巨大差异,但我认为这是一个应该回答的问题:

我怎样才能摆脱那个 for 循环并替换为一些 *ply 调用?

编辑:在给出的示例中,我生成样本数据,并定义一个等于向量中行数的向量。

for 循环执行以下步骤:

1) 取一个子矩阵,从第1行到第i行

2) 如果 i 为 1,它只是对该向量中的值求和

3) 如果i不为1,它获取每一行的总和,然后获取总和的平均值并将其存储在向量meanVec的位置i。

最后,它打印出该总和的平均值。

这符合您的描述:

cumsum(rowSums(sampleData))/seq_len(nrow(sampleData))

但是,您的代码并没有这样做。