我在R中使用wilcox.test
时遇到了问题。
我的数据对象是一个矩阵,其中第一列包含名称,所有其他列都包含数值(基因表达)测量结果:
str(myMatrix)
'data.frame': 2000 obs. of 143 variables:
$ precursor : chr "name1" "name2" "name3" "name4" ...
$ sample1: num 1.46e-03 2.64e+02 1.46e-03 1.46e-03 1.46e-03 ...
$ sample2: num 1.46e-03 1.91e+02 1.46e-03 1.46e-03 1.46e-03 ...
$ sample3: num 1.46e-03 3.01e+02 1.46e-03 1.46e-03 4.96 ...
我希望测试矩阵的2000行中,是否存在2个给定部分之间的差异。我尝试了4种不同的方法:
wilcox.test(as.numeric(myMatrix[i,2:87],myMatrix[i,88:98]))$p.value
#[1] 1.549484e-16
wilcox.test(myMatrix[i,2:87],myMatrix[i,88:98])$p.value
#Error in wilcox.test.default(myMatrix[i, 2:87], myMatrix[i, 88:98]) :
#'x' must be numeric
t.test(as.numeric(myMatrix[i,2:87],myMatrix[i,88:98]))$p.value
#[1] 0.2973957
t.test(myMatrix[i,2:87],myMatrix[i,88:98])$p.value
#[1] 0.3098505
如您所见,仅当我对已经是数字的值使用 as.numeric()
时,才能得到无错误消息的 Wilcoxon 测试结果,但即使它们不应该有所区别,结果与 t.test
的结果完全不同。
通过使用在线工具手动验证,显示使用 as.numeric()
值的 t.test
结果是错误的。
关于如何解决这个问题并进行正确的 Wilcoxon 测试,是否有任何建议?如果需要更多信息,请告诉我。
as.numeric
就会出现错误,但是as.numeric(myMatrix[i,2:87], myMatrix[i,88:98])
忽略了第二个参数,并且返回与as.numeric(myMatrix[i,2:87])
相同的结果。看起来你实际上想要的是as.numeric(myMatrix[i,2:87]), as.numeric(myMatrix[i,88:98])
。 - eipi10colnames(myMatrix)[which(unlist(lapply(1:dim(myMatrix)[2],function(x)class(myMatrix[[x]])))!="numeric")]
以检查所有列是否为数字。 - Nightwriterunlist
或as.matrix
具有与as.numeric
相同的效果,在此处使用任何一个都会使其更容易知道它实际上是为了什么。另外,您可以将数据保留在真正的矩阵中,这意味着您需要摆脱“precursor”列(您可以将该信息保存为行名称)。 - janattack