Значимые цифры при преобразовании 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)
решить вопрос в моем случае.