R:在网页上打印绘图,同时发布数据以重新使用水管工创建的API



我一直在使用水管工包装开发REST API。我仍在学习如何做到这一点的基础知识。我希望API到:

1)收到已发布的数据和参数并运行模型。2)寄回结果。3)在网页(或任何网页)上打印一个图。

我有#1和#2的工作,但是我没有找到做#3的方法。我确定有一些我没有完全理解的概念。

这是我运行API的脚本。我一直在rstudio的一个实例中运行此操作:

# Packages
library(plumber)
library(jsonlite)
#* @post /predict_mtcars
mtcars.driver <- function(df, depVar, predVars){
  # Convert objects to JSON
  depVar <- fromJSON(depVar)
  predVars <- fromJSON(predVars)
  df <- fromJSON(df)
  df <- df[, c(depVar, predVars)]
  fit <- lm(df)
  outDf <- data.frame(depVar = df[depVar], 'Predicted' = predict(fit),
                      'Residuals' = fit$residuals)
  print(plot(outDf))
  return(toJSON(outDf))
}

这是我的代码驱动脚本:

# Deploy.R
library(plumber)
setwd('YOUR PATH')
r <- plumb("Driver.R")
r$run(port=8080)

这是我在rstudio的第二个实例上运行的测试脚本:

# Packages
library(sp)
library(jsonlite)
library(httr)
# Data
data(mtcars)
# Parameters
depVar <- 'mpg'
predVars <- c('cyl', 'hp', 'wt')
df <- mtcars
body <- list("df" = toJSON(df),
             "depVar" = toJSON(depVar),
             "predVars" = toJSON(predVars))
req <- POST('http://localhost:8080/predict_mtcars', 
            body = body,
            encode = 'json',
            verbose())
outDf <- fromJSON(content(req)[[1]][1])
plot(outDf)

除第一个脚本中的打印/绘图语句外,所有这些作品。我几乎看不到在线描述的内容很少,但是能够将数据发布到API,然后在API网站上打印图和其他信息似乎很有用。

请注意,我还有很多关于使用水管工托管API的知识,因此可能是问题的一部分。预先感谢。

您几乎在那里!但是,您缺少一个序列化器来告诉水管工以输出图片,例如png。查看下面的第二行,我添加@png。那是序列化器,是文档中描述的众多。

#* @post /predict_mtcars
#* @png
mtcars.driver <- function(df, depVar, predVars){
  # Convert objects to JSON
  depVar <- fromJSON(depVar)
  predVars <- fromJSON(predVars)
  df <- fromJSON(df)
  df <- df[, c(depVar, predVars)]
  fit <- lm(df)
  outDf <- data.frame(depVar = df[depVar], 'Predicted' = predict(fit),
                      'Residuals' = fit$residuals)
  plot(outDf)
}

当您与API客户端(如Insomnia)打电话给PNG中的地块时,它将在此渲染。但是有了您的测试脚本,您需要将二进制内容从req对象中获取。

这样做的一种方法将如下:

writeBin(req$content, con = file("~/Desktop/outDf.png", "wb"))

这将使您的情节作为桌面上的png(如果您在Windows上或Mac上,则可能需要更改系统明智的道路。

相关内容

最新更新