gpt4 book ai didi

使用 Plumber API 的 R POST 响应在客户端将 10 位小数位 double (所需精度)转换为 4 位小数位 double

转载 作者:行者123 更新时间:2023-12-04 02:50:33 25 4
gpt4 key购买 nike

平台:
- 具有 16 个内核和 128 GIG RAM 的 AWS 实例。
- 红帽企业 7.5。
- R。
- RStudio 服务器。
- Plumber API 将 R 函数公开为 Web 服务端点。
- 客户端是 Excel VBA。

问题:
- 具有不同类型列的数据表,包括 double 、整数和字符串数据。
- 就在 R 端点函数发送响应(表)之前,当我检查数据表中的 double 数据时,所有条目的长度都在 6 到 10 位小数位之间。
- 表格以 JSON 格式到达客户端后,99% 的双列将四舍五入到小数点后 4 位。

知道可能是什么问题 - 为什么 double 会四舍五入,四舍五入在哪里发生,我该如何防止?
- 我尝试了不同的请求 header 设置,但没有奏效。
- 我试图将受影响的双列作为向量或列表发送,但我得到了相同的“强制”舍入。

提前致谢

最佳答案

这不是很好的记录,但事实证明这是使用 jsonlite::toJSON 中的默认值的结果。序列化程序 ( digits = 4 )。这里有一些细节:
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]"

因此,无论您的函数结果如何,请使用 jsonlite::toJSON(..., digits = NA) 对其进行预序列化。 ,并将其直接存储在响应的正文中,然后返回响应对象。

事实证明有一种“正确”的方法可以做到这一点,我通过将此作为 GitHub 问题提交 https://github.com/trestletech/plumber/issues/403 发现了这一点。 .但是,此版本似乎尚未在 CRAN 上发布,因此您可以同时使用上面的修复程序。
在您的 API 定义中,像这样指定序列化程序: #' @serializer json list(digits = 12)或专门用于 json #' @json(digits = 12)

关于使用 Plumber API 的 R POST 响应在客户端将 10 位小数位 double (所需精度)转换为 4 位小数位 double ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55287408/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com