首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >R使用Plumber API的POST响应在客户端将10位小数位双精度(所需精度)转换为4位小数位双精度

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

Stack Overflow用户
提问于 2019-03-22 02:51:29
回答 1查看 821关注 0票数 3

平台:-具有16核和128G RAM的AWS实例。- Redhat Enterprise 7.5。- R. - RStudio服务器。- Plumber API将R函数公开为Web服务端点。-客户端为Excel VBA。

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

你知道问题出在哪里吗--为什么双精度会被舍入,舍入发生在哪里,以及如何防止这种情况发生?-我尝试了不同的请求头设置,但都不起作用。-我尝试将受影响的双列作为向量或列表发送,但我得到了相同的“强制”舍入。

提前感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-22 03:58:16

这并没有很好的文档记录,但事实证明这是使用

序列化程序(

)。这里有一些细节:

https://www.rplumber.io/articles/rendering-output.html

我不知道如何将参数从参数化传递到该参数中,但这里有一个变通方法:

代码语言:javascript
运行
复制
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

然后,您应该能够得到如下响应:

代码语言:javascript
运行
复制
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。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55287408

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档