我是R newby,如果这个问题对你们来说太琐碎了,我会提前道歉,但是我无所不能。
在尝试学习R的过程中,我发现自己面临着创建重复循环以对一个变量执行曼惠特尼U测试组1和组2的多个变量的问题。下面是一个示例。 (https://i.redd.it/2c0429k4y3y21.png)
即使我可以对一个变量一个变量(从A到Z)执行测试,但在我测试的实际数据中,我仍然有10000多个变量,因此我必须找到一种方法来实现以下目的:1)自动进行测试; 2)生成包含所有结果p值的文件。
有人会乐于助我完成任务吗?我非常愿意花更多的时间来学习如何在R中进行编码,但是对此我需要稍作调整。
谢谢
答案 0 :(得分:0)
由于您提供的数据只有一个因子水平,因此我添加了三个“ Wildtypes”以使代码正常工作。
gen <- structure(list(genotype=structure(c(1L, 1L, 1L, 1L, 1L, 1L),
.Label=c("Mutant", "Wildtype"), class="factor"), X312=c(0, 0, 9.927911044,
7.604660497, 0, 8.469434699), X1.Sep=c(9.296165425, 7.994991396, 10.3226941,
10.59396298, 10.2554214, 7.963356173), X2.Sep=c(12.0207487, 10.92364072,
11.22504751, 11.2077482, 11.91886469, 11.64801165), X1.Dec=c(0L, 0L, 0L, 0L, 0L,
0L), X128up=c(8.051389852, 8.437100325, 2.9382856, 9.05631996, 0, 8.993819702),
X140up=c(7.859521468, 7.638131579, 0, 8.567090791, 8.7672994, 10.219634)),
row.names=c(NA, 6L), class="data.frame")
gen[1:3, 1] <- factor(rep(2, 3), label="Wildtype")
因为我们可以像这样对一栏进行曼惠特尼U检验:
# for column 6
wilcox.test(gen[gen$genotype == "Mutant", 6],
gen[gen$genotype == "Wildtype", 6], exact=FALSE)$p.val
我们可以使用sapply()
简单地循环遍历列索引(不包括第一个),从而对所有列执行该操作,就像这样:
sapply(2:ncol(gen),
function(x) {
wilcox.test(gen[gen$genotype == "Mutant", x],
gen[gen$genotype == "Wildtype", x], exact=FALSE)$p.val
}
)
# [1] 1.00000 1.00000 1.00000 NaN 0.66252 0.08085