Это было не очень хорошо задокументировано, но оказалось, что это результат использования значений по умолчанию в сериализаторе jsonlite::toJSON
(digits = 4
). Здесь есть некоторые детали:
https://www.rplumber.io/docs/rendering-and-output.html#rendering-and-output
Я не вижу, как передать аргумент в вашу параметризацию, но вот обходной путь:
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)