当Web服务返回错误答案时公开的持久化R模型

当Web服务返回错误答案时公开的持久化R模型,r,machine-learning,swagger,plumber,R,Machine Learning,Swagger,Plumber,我正在使用Plumber和Swagger将R机器学习分类模型作为web服务公开。我已经训练了一个模型,并将其保存为“j48.model.rda”。我现在正在将模型加载到一个名为“myFile.R”的文件中。此文件包含以下R代码: library(rJava) jsDirData <- "C:/AA Research/Playpen/Data" setwd(jsDirData) #Load the saved model load(file="j48.model.rda", envir =

我正在使用Plumber和Swagger将R机器学习分类模型作为web服务公开。我已经训练了一个模型,并将其保存为“j48.model.rda”。我现在正在将模型加载到一个名为“myFile.R”的文件中。此文件包含以下R代码:

library(rJava)
jsDirData <- "C:/AA Research/Playpen/Data"
setwd(jsDirData)

#Load the saved model
load(file="j48.model.rda", envir = parent.frame(), verbose = FALSE) 

#' @param naasra90th:numeric The 90th Percentile Naasra value for the segment
#' @param rut90th:numeric The 90th Percentile Rut Depth for the segment
#' @param surfAge:numeric The surface age of the segment, in years (fractions are OK)
#' @param rutRate90th:numeric The rut rate on the 90th Percentile Rut depth (mm/year)
#' @param maintCount:int The number of maintenance acions
#' @get /getTreatment
#' @html
#' @response 200 Returns the treatment class (ThinAC or none) prediction from the j48 model;
#' @default  Bonk!
getTreatment <- function(naasra90th, rut90th, surfAge, rutRate90th, maintCount) {
  xVals <- list(naasra90th = naasra90th, rut90th = rut90th, surfAge = surfAge, 
                rutRate90th = rutRate90th, maintCount = maintCount)
  nData <- as.data.frame(xVals)
  pred <- predict(j48.model,newdata = nData)
  res <- as.character(pred)
  return(res)
}

t <- getTreatment(50,8.8,5,0.3,0)  #should return "none"
t    #"none" Correct!

t <- getTreatment(888,888,888,888,888) #should return "ThinAC"
t    #"ThinAC" Correct!
库(rJava)

jsDirData我相信您从swagger调用中收到的值仍然在character类中,因为plumber不会对查询字符串参数进行任何转换

在作为.data.frame执行
之前,请尝试更改xVAL中值的类别


xVals谢谢布鲁诺,我试过了,但似乎没用。我怀疑这是个问题,因为——正如我在上面的帖子中所展示的那样——当我直接在R-studio中调用函数时,无论我是否在上面插入你的行,我都会得到正确的结果。顺便说一句,我使用的是R版本4.0.0(2020-04-24)。但是谢谢你的建议!关于获取处理(“888”、“888”、“888”、“888”、“888”、“888”)
呢?它仍然给出了正确的答案吗?通过使用上面的代码,但只保留API,以下是我在调用模型之前在nData中的内容<代码>rBrowse[1]>xVals$naasra90th[1]“888”$rut90th[1]“888”$surfAge[1]“888”$rutRate90th[1]“888”$maintCount[1]“888”浏览[1]>NADATA naasra90th rut90th surfAge RUTstate 90TH浏览[1]>lapply(NADATA,class)$naasra90th[1]“字符”$90TH[1]“字符”$surfAge[1]“character”$rutRate90th[1]“character”$maintCount[1]“character”
非常感谢布鲁诺坚持这一点!我现在明白了,它正在工作!不知道为什么它第一次不起作用。好的,所以这个API的问题是参数总是以字符串的形式输入,并且需要在需要时显式地转换为数字?当它们从查询字符串(即a=1&b=3)输入时是的。在
@param val:num
中定义它们的唯一原因是为了描述您的API,并在虚张声势的一面添加一些验证。如果您认为plumber应该尝试对传入查询进行类转换,我建议在github项目rstudio/plumber中创建一个问题。可能有一种方法可以在不破坏现有代码的情况下实现该功能。
library(plumber)

jsDirData <- "C:/AA Research/Playpen/Data"
setwd(jsDirData)

r <- plumb("myfile.R")
r$run(port=8000)