在R中使用行平均值和行标准偏差的列式zscore

在R中使用行平均值和行标准偏差的列式zscore,r,R,我正在尝试使用R中的行平均值和行标准差来获得列式zscore。我不熟悉更复杂的函数,如apply(),因此我不确定不在嵌入式for循环中手动执行的最佳方法。Exp是一个表达式矩阵,将非常大,因此嵌入for循环将需要一些时间。请原谅语法粗糙。我需要保留这些名字 Dat<-for (i in 1:length(nrow(Exp))) { for (j in 1:length(ncol(Exp))) { (Exp[,j]-rowMean(Ex[i,]))/rowSds[i,] } } Dat我

我正在尝试使用R中的行平均值和行标准差来获得列式zscore。我不熟悉更复杂的函数,如apply(),因此我不确定不在嵌入式for循环中手动执行的最佳方法。Exp是一个表达式矩阵,将非常大,因此嵌入for循环将需要一些时间。请原谅语法粗糙。我需要保留这些名字

Dat<-for (i in 1:length(nrow(Exp))) {
for (j in 1:length(ncol(Exp))) {
(Exp[,j]-rowMean(Ex[i,]))/rowSds[i,]
}
}
Dat我们可以加快速度(并使其更具可读性)

伪造数据:

set.seed(42)

mtx我们可以使用
rowMeans
rowSds

library(matrixStats)
(mtx - rowMeans(mtx))/rowSds(mtx)
数据
set.seed(42)

mtx首先,不要使用apply。您可以使用colmeans创建自己的colVars函数。这就是我所做的,现在C++中存在这个函数。它是Rfast::colVars(x)

我会使用
scale()
函数,它完全满足您的需要

mtx <- matrix(rnorm(100), ncol= 2)
mtx_z <- apply(mtx, 2, scale)

mtx不清楚。关于列式,rowmean。请给出一个小的可生产的示例。如果您包含一个简单的示例输入和所需的输出,可以用来测试和验证可能的解决方案,那么您会更容易得到帮助。
length(nrow(…)
将始终回答1,因为
nrow
返回一个数字,并且该数字的
length
为1。如果帧有0行,
length(nrow(mtcars[0,])
仍然返回1,当然不是您需要的。(例外的是,当代码> NROW< /COD>失败)。对于健壮的编程,考虑替换<代码> 1:长度(…)/代码>用<代码> SEQYLEN(NROW(EXP))< /代码>。
mtx <- matrix(rnorm(100), ncol= 2)
mtx_z <- apply(mtx, 2, scale)