使用来自使用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())
将向量转换为数字