R - 应用于增加的子矩阵,而不是单个行/列

时间:2015-03-23 13:40:47

标签: r for-loop apply

所以我一直在思考如何在没有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)如果我是1,它只是总结了该向量中的值

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

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

1 个答案:

答案 0 :(得分:3)

这就是你所描述的:

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

但是,您的代码不会这样做。