我希望我能在这里找到这个问题的答案。我有这段代码,我试图仔细分析,
alphas <- matrix(runif(900), ncol=3, byrow=TRUE)
z <- t(apply(alphas, 1, cumsum))
for(i in 1:nrow(z)){
z[i, ] <- z[i, ] / (1:ncol(z))
}
我试图理解z[i,]<- z[i,]/(1:ncol(z))
代码对矩阵alpha的作用。我知道我们将每列按输入矩阵中的列序列分开。我也知道当使用带有边距2的应用时,我们应用我们感兴趣的函数,在这种情况下,“cumsum”在矩阵alpha的行上。这基本上就是我所知道的,我不知道为什么下一行以及我的矩阵alphas会怎么做?
我会感激一些遗嘱 非常感谢你
答案 0 :(得分:1)
使用您的代码我会说您正在计算alphas
的行累计均值。
使用循环中的行,您正在进行向量除法,得出每列累积和的平均值。
查看ncol(z)
产生的结果
> ncol(z)
[1] 3
所以基本上你在循环中用z[i, ] / (1:ncol(z))
做的事情是每行分别用一个向量或序列,用列号的长度来表示,即c(1, 2, 3)
或只是{{1 }}
考虑1:3
和alphas
的第一行。
z
循环的核心产生
set.seed(42) # for sake of reproducibility
alphas <- matrix(runif(900), ncol=3, byrow=TRUE)
z <- t(apply(alphas, 1, cumsum))
> alphas[1, ]
[1] 0.9148060 0.9370754 0.2861395
> z[1, ]
[1] 0.914806 1.851881 2.138021
> cbind(alphas[1, 1], mean(c(alphas[1, 1:2])), mean(c(alphas[1, 1:3])))
[,1] [,2] [,3]
[1,] 0.914806 0.9259407 0.7126737
因此,> z[1, ] / 1:ncol(z)
[1] 0.9148060 0.9259407 0.7126737
行的每个元素将被其对应的向量除数除以,得到聚合单元格的均值。
你的循环只是为整个z[1, ]
矩阵做了这个。
Apropos-在 R 中更快更方便我们在函数内以矢量化方式执行此操作。由于您了解z
,因此您将了解apply()
。我们将首先定义一个函数。
sapply()
这会产生与循环相同的效果,但是采用 R 方式。
我们可以用一步来说明
FUN1 <- function(i){
z[i, ] / 1:ncol(z)
}
M <- t(sapply(1:nrow(z), FUN1))
> head(M, 3)
[,1] [,2] [,3]
[1,] 0.9148060 0.9259407 0.7126737
[2,] 0.8304476 0.7360966 0.6637630
[3,] 0.7365883 0.4356275 0.5094157