作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我最近一直在 R 中试验 Plumber,当我使用 POST 请求传递以下数据时取得了成功;
{"Gender": "F", "State": "AZ"}
#* @post /score
score <- function(Gender, State){
data <- list(
Gender = as.factor(Gender)
, State = as.factor(State))
return(data)
}
[{"Gender":"F","State":"AZ"},{"Gender":"F","State":"NY"},{"Gender":"M","State":"DC"}]
{
"error": [
"500 - Internal server error"
],
"message": [
"Error in is.factor(x): argument \"Gender\" is missing, with no default\n"
]
}
最佳答案
我在这里看到两种可能的解决方案。第一个是基于命令行的方法,我假设您正在尝试。我在 Windows 操作系统上对此进行了测试,并使用了基于列的 data.frame 编码,由于 JSON 字符串长度较短,我更喜欢这种编码。确保正确转义引号以避免“参数“...”丢失,没有默认错误:
curl -H "Content-Type: application/json" --data "{\"Gender\":[\"F\",\"F\",\"M\"],\"State\":[\"AZ\",\"NY\",\"DC\"]}" http://localhost:8000/score
# [["F","F","M"],["AZ","NY","DC"]]
第二种方法是 R 原生的,具有将所有内容集中在一个地方的优势:
library(jsonlite)
library(httr)
## sample data
lst = list(
Gender = c("F", "F", "M")
, State = c("AZ", "NY", "DC")
)
## jsonify
jsn = lapply(
lst
, toJSON
)
## query
request = POST(
url = "http://localhost:8000/score?"
, query = jsn # values must be length 1
)
response = content(
request
, as = "text"
, encoding = "UTF-8"
)
fromJSON(
response
)
# [,1]
# [1,] "[\"F\",\"F\",\"M\"]"
# [2,] "[\"AZ\",\"NY\",\"DC\"]"
请注意
httr::POST()
需要一个长度为 1 的值列表作为查询输入,因此应事先对数组数据进行 jsonified。如果你想完全避免额外的包导入,一些
system()
,
sprintf()
等魔法应该可以解决问题。
R/plumber.R
并稍微浓缩):
#* @post /score
score = function(Gender, State){
lapply(
list(Gender, State)
, as.factor
)
}
以及启动 API 的代码:
pr = plumber::plumb("R/plumber.R")
pr$run(port = 8000)
关于json - 如何在 R 中使用 Plumber 使用一组 JSON 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48667477/
我是一名优秀的程序员,十分优秀!