2015-03-27 6 views
0

Во-первых, я создаю простой кадр данных в R:Использование переменной Ссылку столбца в R Dataframe

Test <- as.data.frame(matrix(ncol=20,nrow=60)) 

Следующая заливаю пару колонок:

Test[,1] <- 1 
Test[,2] <- 2 

Далее я проверить чтобы убедиться, что я могу правильно ссылаться на значения:

Test[1,2] 
[1] 2 

Это работает как ожидалось. затем создать пару переменных в подготовке к для цикла с нецелой последовательностью:

j <- 1.2 
h <- ((j-1)*10) 
h 
[1] 2 

потом использовать «H» для того, чтобы вытащить значение из кадра данных:

Test[1,h] 
[1] 1 

Это дает неожиданный результат. (Это должно быть 2).

Почему это? Есть ли какая-то проблема в R, связанная с ссылкой на столбцы с использованием переменных?

+2

Возможно потому, что '1,2 - 1 == 0.2' дает ложные: http://stackoverflow.com/questions/9508518/why-are-these-numbers-not- равны. Также попробуйте 'as.integer (h)' и увидите, что он дает вам '1'. –

+0

Ах, это решает проблему, спасибо огромное! Я смогу использовать 'round()' в этом параметре, чтобы сделать его идеальным. – BarnSoHard

ответ

1

R думает, что это разные цифры. Вот объяснение Why doesn’t R think these numbers are equal?

Единственные чисел, которые могут быть представлены именно в числовой тип R в представляют собой целые числа и дроби, знаменатель является степенью 2. Другие чисел должны быть округлены до (обычно) 53 двоичных цифр точности , В результате два числа с плавающей запятой не будут надежно равны , если они не были вычислены по тому же алгоритму, и не всегда даже тогда.

Функция all.equal() сравнивает два объекта с использованием числового допуска .Machine $ double.eps^0.5. Если вам нужна гораздо более высокая точность , то вам нужно будет рассмотреть распространение ошибки .

Таким образом, использовать

all.equal(1, h) 
Смежные вопросы