平台:-具有16核和128G RAM的AWS实例。- Redhat Enterprise 7.5。- R. - RStudio服务器。- Plumber API将R函数公开为Web服务端点。-客户端为Excel VBA。
问题:-数据表包含不同类型的列,包括双精度、整数和字符串数据。-就在R端点函数发送响应(表)之前,当我检查数据表中的双精度数据时,所有条目的长度都在6到10位小数之间。-一旦表格以JSON格式到达客户端,99%的双精度列被四舍五入为4位小数位长度。
你知道问题出在哪里吗--为什么双精度会被舍入,舍入发生在哪里,以及如何防止这种情况发生?-我尝试了不同的请求头设置,但都不起作用。-我尝试将受影响的双列作为向量或列表发送,但我得到了相同的“强制”舍入。
提前感谢
发布于 2019-03-22 03:58:16
这并没有很好的文档记录,但事实证明这是使用
序列化程序(
)。这里有一些细节:
https://www.rplumber.io/articles/rendering-output.html
我不知道如何将参数从参数化传递到该参数中,但这里有一个变通方法:
library(plumber)
#* @apiTitle A Test API
#* Run a simple function
#* @get /
function(req, res) {
x <- rnorm(1)
res$body <- jsonlite::toJSON(x, digits = NA)
res
}
# plumb("plumber_1.R")$run(port = 5762)
# Save this file as e.g. "plumber_1.R" and run the commented line
然后,您应该能够得到如下响应:
library(httr)
y <- GET("http://127.0.0.1:5762/")
content(y, as = "text")
1
“
-0.982448323838634
“
因此,无论您的函数的结果是什么,请使用以下命令对其进行预串行化
,并将其直接存储在响应的主体中,然后返回响应对象。
事实证明,有一种“正确”的方法可以做到这一点,我是通过将此问题作为GitHub问题进行归档来发现这一点的
https://github.com/trestletech/plumber/issues/403
..。然而,看起来这个版本还没有在CRAN上,所以你可以在此期间使用上面的修复。
在API定义中,按如下方式指定序列化程序:
或用于特定的json。
https://stackoverflow.com/questions/55287408
复制相似问题