所以我一直在思考如何在没有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。
最后,它打印出该总和的平均值。
答案 0 :(得分:3)
这就是你所描述的:
cumsum(rowSums(sampleData))/seq_len(nrow(sampleData))
但是,您的代码不会这样做。