Возможно, проблема не в вашем исходном файле, поскольку вы говорите, что это происходит и с .csv и .txt.
Попробуйте проверить текущее значение параметра отображения цифр, запустив options()$digits
Если результат, например. 14 скорее всего проблема.
В этом случае попробуйте запустить команду r options(digits=8)
, которая установит отображаемые цифры = 8 для сеанса.
Затем просто перепечатайте свой фрейм данных, чтобы увидеть, что изменение уже вступило в силу в отношении того, как десятичные знаки отображаются на экране по умолчанию.
Обратитесь к ?options
для получения дополнительной информации о настройках отображения цифр и других параметрах сеанса.
Изменить, чтобы улучшить исходный ответ и уточнить для будущих читателей:
- Изменение
options(digits=x)
вверх или вниз не меняет значение, которое сохраняется или считывается во внутреннюю память для переменных с плавающей запятой. Параметр сеанса digits
просто изменяет способ печати значений с плавающей запятой, т.е. отображения на экране для общих функций печати в соответствии с документацией '?options`:
цифры: управляет количеством значащих цифр для печати при печати числовых значений.
- То, что ОП показал как проблему, с которой он столкнулся (R отображает больше десятичных знаков после последней цифры в десятичном числе, чем ожидал увидеть ОП), не было вызвано тем, что исходный файл был прочитан из Excel, т.е. учитывая, что у ОП была такая же проблема с CSV и TXT процесс импорта не вызвал проблем.
Если вы видите больше десятичных знаков, чем хотите по умолчанию, в распечатываемом/отображаемом выводе (например, для фреймов данных и числовых переменных), попробуйте проверить options()$digits
и понять, что этот параметр просто используется по умолчанию для количества цифр, используемых в обычных методах отображения и печати R. ОДНАКО, это не влияет на хранение данных или переменных с плавающей запятой.
Что касается чисел с плавающей запятой, другой ответ здесь показывает, как установка option(digits=n)
выше значения по умолчанию может помочь продемонстрировать некоторые особенности точности/отображения, связанные с точностью с плавающей запятой. Это отдельная проблема по сравнению с тем, что ОП отобразил в его примере, но это стоит понять.
Для гораздо более подробного и конкретного обсуждения точности с плавающей запятой, чем было бы уместно перефразировать здесь, стоит прочитать этот окончательный вопрос + ответ SO: Почему эти числа не равны?
Этот другой вопрос+ответ+обсуждение касается вопросов, касающихся точности с плавающей запятой, и содержит длинный, хорошо представленный список ссылок которые вы найдете полезными, если вам понадобится дополнительная информация по этому вопросу.
person
krads
schedule
04.09.2018
X <- c(0.0023456, 0.001987, 0.3); sprintf("%g", X)
? - person jogo   schedule 04.09.2018