【发布时间】:2016-04-14 22:26:36
【问题描述】:
我的任务是生成用于计算 Z 分数的 R 代码,然后将其输出到文件中。虽然脚本有效,但我对一些令我感到困惑的行有一些疑问。 输入.txt:
GeneID GeneID-2 GeneName TSS-ID Locus-ID Sample1 Sample2 Sample3 Sample4 Sample5 ID1 X1 Zranb2 TSS1 Loc1 22.49161667 14.7231 19.62885833 26.16171667 39.3109 ID2 X2 Lphn2 TSS2 Loc2 6.439735 5.920786667 8.883331667 7.696353333 10.46969333 ID3 X3 Rpf1 TSS3 Loc3 30.67975 20.93751667 27.30251667 31.55653333 58.57418333 ID4 X4 Ctbs TSS4 Loc4 1.916071667 1.943611667 2.696701667 3.130295 2.74012 ID5 X5 Spata1 TSS5 Loc5 0.715265667 0.3318745 0.4183155 0.961065833 1.10731 ID6 X6 Sap30bp TSS6 Loc6 21.65946667 23.84386667 28.39683333 25.32866667 26.96016667 ID7 X7 Recql5 TSS7 Loc7 7.541321667 4.674345 4.40599 3.24996 3.327395 ID8 X8 Itgb4 TSS8 Loc8 37.3442 51.58868333 51.58868333 44.84458333 42.44406667我想为从样本 1 开始到列末尾的数据列生成 Z 分数。 这是我写的 R 代码:
df <- read.table("Input.txt", row.names=1, header=TRUE, sep="\t", na.strings="NA")
x<-df[,5:ncol(df)] #selects the columns after column 5, so just the data
p<-matrix(0, now(x), ncol(x)) #opens matrix. First issue: I used "0" as I saw other people on forums doing that, but i dont know its significance.It worked for me, so i kept it. Can anyone comment on this?
#Create a loop for row and columns
for (i in 1:nrow(x)) {
for (j in 1:ncol(x)) {
p[i,j] <- (x[i,j]-rowMeans(x[i,]))/sd(x[i,])
}
}
以上脚本成功生成矩阵。有没有办法优化它或者这是一个合理的方法?我的庞大数据集有点慢,但它完成了工作。
输出文件时,我的标题发生了变化。我的目标是将 df 的第一列输出为行名,然后将每个样本名称作为标题输出。为此,我使用了:
rownames(p) <-rownames(df)
colnames(p) <- colnames(df[,5:ncol(df)])
write.table(p, file = "Zscore.txt", append = FALSE, quote = FALSE, sep = "\t", row.names = TRUE, col.names = TRUE)
输出文件如下:
样品 1 样品 2 样品 3 样品 4 样品 5 ID1 -0.212153637 -1.048074183 -0.520196808 0.182762424 1.597662204 ID2 -0.780453984 -1.061276795 0.541869723 -0.100449696 1.400310753 ID3 -0.216506298 -0.890314297 -0.450087937 -0.1558648 1.712773332 ID4 -1.064932662 -1.013415279 0.395343854 1.206440228 0.476563859 ID5 0.02537058 -1.119050742 -0.861024653 0.759083238 1.195621576 ID6 -1.35974252 -0.52968526 1.200411349 0.03452872 0.654487711标题向左移动。另外,如果我想在输出文件中包含 df 的所有前 5 列,该怎么做?
最后,请您指出我上面提到的Zscore方法计算与其他问题中讨论的比例函数之间的区别吗?
【问题讨论】:
-
R 中的很多东西都是矢量化的,包括减法和除法等基本的东西。
-
所以?这有什么关系?感谢您的详细说明。
-
我错过了。现在我做到了。谢谢@akrun
-
绿色复选标记是否应仅用于最佳解决方案 - 请告知?
标签: r loops optimization