使用来自使用read.delim导入的制表符分隔的数据文件中的数据时,我遇到问题。

大多数列包含数值数据,我需要为它们做一个t.test。不幸的是,我总是收到此错误:

Error in if (stderr < 10 * .Machine$double.eps * max(abs(mx), abs(my)))
            stop("data are essentiallyconstant") :
missing value where TRUE/FALSE needed
In addition: Warning messages:
1: In mean.default(x) : argument is not numeric or logical: returning NA
2: In mean.default(y) : argument is not numeric or logical: returning NA

我注意到只有在包含不同级别的向量时才会发生这种情况。
对于水平向量,它甚至不会执行简单的数值运算,例如vector [1] + vector [2]。
但是,没有级别的矢量可​​以正常工作。

如何使用水平向量中的数据进行计算?

谢谢

最佳答案

我已经能够通过以下小示例重现您的错误消息:

x = as.factor(1:5)
y = as.factor(1:5)

t.test(x, y)

产量
Error in if (stderr < 10 * .Machine$double.eps * max(abs(mx), abs(my))) stop("data are essentially constant") :
  missing value where TRUE/FALSE needed
In addition: Warning messages:
1: In mean.default(x) : argument is not numeric or logical: returning NA
2: In mean.default(y) : argument is not numeric or logical: returning NA

问题是您正在尝试对非数值向量执行t检验。同样,没有为因素定义加法:
x + y

产量
[1] NA NA NA NA NA
Warning message:
In Ops.factor(x, y) : + not meaningful for factors

该警告可让您对什么是不正确之处有敏锐的洞察力,并解释为什么您的t检验不起作用。

要解决此问题,您需要按照ilya的建议进行操作:使用as.numeric(as.character())将向量转换为数字

10-07 12:58
查看更多