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))
但是,您的代码并没有这样做。
所以我一直在思考如何在没有 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))
但是,您的代码并没有这样做。