2013-05-04 2 views
4

У меня есть кадр данных из строки 16968 (причины точности указаны ниже). Я проверяю, действительно ли текущая переменная (данные $ Ob) фактически подсчитывает каждую строку в последовательном порядке (данные первой строки $ Ob - это 1 ... последние данные строки $ Ob - 16968 и для каждой строки между ними.Сводная функция Округление Ошибка в r?

Когда я побежал резюме (данные $ Ob) он говорит мне, что максимум 16970 не 16968. Когда я побежал максимум (данные $ Ob) он говорит, что максимум 16968, а не значение из резюме.

I запустил цикл for, чтобы проверить каждое наблюдение, и похоже, что функция max() правильная и что переменная $ Ob Ob Data делает то, что она должна. Но кто-нибудь знает, почему сводная функция отключена на 2? ошибка округления (как-то?), но эта проверка данных имеет решающее значение для анализа, который я делаю, и если это неправильно, то мой последующий анализ будет койкой.

Вот цикл for, который я побежал, но я не думаю, что это важно для этого вопроса.

checker <- vector(length=nrow(rd)) 
na.checker <- vector(length=nrow(rd)) 
    for (i in 1:nrow(rd)){ 
     checker[i] <- ifelse(i==rd$Ob[i], 1, 0) 
     na.checker[i] <- ifelse(is.na(rd$Ob[i])==TRUE,0,1) 
} 
sum(checker) 

Thanks.

ответ

9

Без воспроизводимым примера трудно сказать, но он пахнет как мать всех часто задаваемых вопросов: дисплей точности по умолчанию состоит из четырех цифр, так что 16968 получает округляется до 16970.

Edit: Мы делаем нужны ваши данные примеры здесь, потому что с наивным примера я не может воспроизвести это:

R> set.seed(42) 
R> df <- data.frame(a=as.numeric(1:16968), b=16968:1, 
+     c=rnorm(16968), d=runif(16968)) 
R> summary(df) 
     a    b    c     d   
Min. : 1 Min. : 1 Min. :-4.04328 Min. :0.000101 
1st Qu.: 4243 1st Qu.: 4243 1st Qu.:-0.68271 1st Qu.:0.252515 
Median : 8484 Median : 8484 Median :-0.00528 Median :0.505090 
Mean : 8484 Mean : 8484 Mean :-0.00834 Mean :0.504563 
3rd Qu.:12726 3rd Qu.:12726 3rd Qu.: 0.66746 3rd Qu.:0.758991 
Max. :16968 Max. :16968 Max. : 4.32809 Max. :0.999976 

Edit 2, с ч/т до @ SimonO101:

R> summary(df$a)         ## what OP saw 
    Min. 1st Qu. Median Mean 3rd Qu. Max. 
     1 4240 8480 8480 12700 17000 
R> summary(df$a, digits=6)       ## what OP wanted to see 
    Min. 1st Qu. Median Mean 3rd Qu. Max. 
     1 4243 8484 8484 12726 16968 
R> 
+0

+1 Я никогда не знал об этом. Кажется странным поведением по умолчанию для сводки целочисленного вектора. –

+0

Бинго - спасибо Саймону. Я * знал, что я сам это видел, но это действительно вызвано только колонками. Будет редактировать снова. –

Смежные вопросы