当Web服务返回错误答案时公开的持久化R模型
我正在使用Plumber和Swagger将R机器学习分类模型作为web服务公开。我已经训练了一个模型,并将其保存为“j48.model.rda”。我现在正在将模型加载到一个名为“myFile.R”的文件中。此文件包含以下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 =
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)