Значимые цифры при преобразовании JSON с использованием fromJSON в jsonlite

Я конвертирую JSON в объекты R, используя fromJSON от jsonlite пакет, но числовые значения округляются. Как я могу контролировать точность для преобразованных числовых значений?

пример

library(jsonlite)
fromJSON('{"lon": -86.143278324353244}')
## $lon
## [1] -86.14328

## Desired output is -86.143278324353244

Глядя в jsonlite код, я проследил вызовы функций обратно в R_parse, в parse.c

.Call(jsonlite:::R_parse, "-86.143278324353244", FALSE)
## [1] -86.14328

Другие попытки

  • fromJSON имеет digits аргумент, но это не правильный аргумент с toJSON,
  • Другие пакеты, такие как rjson а также RJSONIO дать аналогичные результаты.

1 ответ

Решение

Это здесь...

> print(fromJSON('{"lon": -86.143278324353244}'), digits=20)
$lon
[1] -86.143278324353247

В случае, если кто-то все еще посещает это - я нажимаю что-то похожее, и, кстати, это предел, в котором JSON имеет только тип с плавающей точкой, а fromJSONимпорт округляется. В моем случае я пытался прочитать значение наносекунды, и оно увеличилось на 13 нс или около того. Если вы запустите R:

suppressMessages(library(jsonlite))
options(digits=22)
x=fromJSON('{"ns": 1567002188374607769}')
print(x)
print(fromJSON('{"ns": 1567002188374607769}'), digits=22)

Понятно:

$ns
[1] 1567002188374607872

$ns
[1] 1567002188374607872

...872 знак равно ...769 Я не нашел хорошего решения, кроме, возможно, сохранения значения ns в виде строки JSON...

Используя настройку options(digits = 30) решить вопрос в моем случае.

Другие вопросы по тегам