Статистика R: проблема с простым вектором столбца - PullRequest
5 голосов
/ 14 июля 2010

У меня проблема с использованием данных из файла данных с разделителями табуляции, импортированного с 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] для выровненных векторов. Векторы без уровней работают нормально.

Как я могу использовать данные в выровненных векторах для расчета?

Спасибо

Ответы [ 3 ]

5 голосов
/ 14 июля 2010

Мне удалось воспроизвести ваше сообщение об ошибке на следующем небольшом примере:

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-тест не работает.1013 *

Чтобы решить проблему, вам нужно сделать так, как предлагает Илья: преобразовать ваши векторы в числовые значения с помощью as.numeric(as.character())

0 голосов
/ 18 сентября 2017

Вы говорите: «Большинство столбцов содержат числовые данные». Это проблема. Только когда все столбцы содержат числовые данные, функция может применяться без изменения типа данных. Если в других столбцах есть нечисловые данные, вы должны изменить тип данных в функции apply:

        pvalue<-apply(x,1,ttest<-function(tmp { 
                              if(length(unique(c(tmp[5],tmp[7],tmp[9])))!=1 && 
                              length(unique(c(tmp[11],tmp[13],tmp[15])))!=1) 
                              t.test(c(as.numeric(tmp[5]),as.numeric(tmp[7]),
                              as.numeric(tmp[9])), c(as.numeric(tmp[11]), 
                              as.numeric(tmp[13]),as.numeric(tmp[15])))$p.value 
                              else NA})
0 голосов
/ 14 июля 2010

Возможно, некоторые из ваших данных могут быть не в числовом формате после загрузки.Проверьте структуру данных с помощью str(your.data).Если желаемые переменные не являются числовыми, вы можете преобразовать их с помощью data$var1 <- as.numeric(data$var1).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...