Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

R statistics: problem with simple column vector

Tags:

r

statistics

I have a problem using data from a tab delimited data file imported with read.delim.

Most of the columns contain numerical data which I need to do a t.test for. Unfortunately I always get this error:

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

I noticed that this only happens with vectors that consist of different levels. It won't even perform simple numerical operations like vector[1] + vector[2] for leveled vectors. Vectors without levels work fine, though.

How can I use the data in the leveled vectors for calculation?

Thank you

like image 969
jev Avatar asked Jul 14 '10 14:07

jev


2 Answers

I have been able to reproduce your error message with the following small example:

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

t.test(x, y)

yields

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

The problem is you are trying to perform a t-test on non-numeric vectors. Addition likewise is not defined for factors:

x + y

yields

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

The warning gives keen insight as to what is amiss and also explains why your t-test is not working.

To fix the problem, you need to do as ilya suggests: convert your vectors to numeric with as.numeric(as.character())

like image 194
Greg Avatar answered Sep 26 '22 12:09

Greg


It is possible that some of your data may not be in numeric format after loading it. Check the structure of the data with str(your.data). If your your desired variables are not numeric you can convert them with data$var1 <- as.numeric(data$var1).

like image 24
ilya Avatar answered Sep 26 '22 12:09

ilya