我正在使用fromJSON
包中的jsonlite
将JSON转换为R对象,但数值正在舍入。如何控制转换数值的精度?
示例
library(jsonlite)
fromJSON('{"lon": -86.143278324353244}')
## $lon
## [1] -86.14328
## Desired output is -86.143278324353244
查看jsonlite
代码,我在parse.c
.Call(jsonlite:::R_parse, "-86.143278324353244", FALSE)
## [1] -86.14328
其他尝试
fromJSON
有一个digits
参数,但它不是toJSON
的有效参数。rjson
和RJSONIO
会产生类似的结果。答案 0 :(得分:3)
它在那里......
> print(fromJSON('{"lon": -86.143278324353244}'), digits=20)
$lon
[1] -86.143278324353247
答案 1 :(得分:0)
如果有人仍在访问此文件-我碰到类似的东西,当然,这是JSON仅具有浮点类型且fromJSON
导入是舍入的限制。
以我为例,我试图读取一个纳秒级的值,但它被提高了13ns左右。如果您在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字符串之外,我还没有一个很好的解决方案...
答案 2 :(得分:0)
使用设置options(digits = 30)
解决了我的问题。