好的,所以我是R的新手,但到目前为止我已经取得了相当不错的成功 - 我正在两个数据帧的相应行之间运行统计测试(好吧,一个只是一串值,因为它只是一栏)。我希望使用以下For-Loop:
zvalues = NULL
zvalues = numeric(0)
for(i in seq(nrow(geneexpx))){
zvalues[i] <- try(unname((geneexpx[i]-rowMeans(geneexpy[i,])) / rowSds(geneexpy[i,])))
}
问题是,结果zvalues数字为空。我不知道为什么。我可以为一行运行相同的功能,它工作正常。例如:
s = unname(geneexpx[4]-rowMeans(geneexpy[4,])) / rowSds(geneexpy[4,])
s
[1] -2.431277e+156
如果您对可能出现的问题有任何想法,请与我们联系。
编辑:
geneexpx的负责人:
c(1.501400411, -0.818584726, -0.455614921, -0.138022494, -1.213938495, -0.536465133)
geneexpy非常大,但每列与上面的geneexpx相似。
答案 0 :(得分:0)
你有几件事情在这里发生。首先,您需要将zvalues
定义为向量。其次,rowMeans
和rowSds
是对矩阵的操作,而不是向量。选择greneecxpy[i, ]
,您将选择矩阵的i
行,这将是一个向量。
你没有提供geneexpy
所以我提出了一个:
zvalues = rep(NA, length(geneexpx))
geneexpy <- matrix(runif(60), nrow = 6)
for(i in seq_along(geneexpx)){
zvalues[i] <- (geneexpx[i] - mean(geneexpy[i,])) / sd(geneexpy[i,])
}
> zvalues
[1] 3.772994 -4.283168 -2.812811 -2.074548 -5.649359 -4.323920