作者:stone  R语言中文社区专栏作者

知乎ID:

https://zhuanlan.zhihu.com/p/50987545

很多R使用者都会遇到这样的情境,自己建好了一个模型,预测时需要实时计算,因此需要上线与后端JAVA对接,有以下解决办法:

  1. JAVA调R语言。

  2. 以数据库或本地文件为媒介,将对应的R写成传参脚本实时计算好入库或者生成本地文件,再读取结果。

  3. 封装成传参的Rest API接口。

对于1有两个问题,稳定性与中文编码。2的话,在数据量小的时候可行,数据量大且不需入库时存储压力大,且要考虑数据前后的对应问题。

本文主要针对3做简单介绍,R中Rest API的包主要有plumber,opencpu。由于plumber使用起来极其方便,把它当做第一选择。

安装

install.packages("plumber", repos = "https://mirrors.tongji.edu.cn/CRAN/")

官网案例

首先新建一个名为plumber.R的脚本,

# plumber.R#' Echo the parameter that was sent in
#' @param msg The message to echo back.
#' @get /echo
function(msg=""){list(msg = paste0("The message is: '", msg, "'"))
}

该函数很简单,返回含msg文本输出的list。

为什么要返回list结构?因为plumber会自动把list转化为json结构输出,因此可以很方便地通过list构建你想要的输出结构,plumber会自动转换成对应结构的json。

然后运行:

pr <- plumber::plumb("plumber.R")
pr$run()

即可在命令行看到以下输出:

此时,在浏览器输入127.0.0.1:4267/echo?,(get请求可以直接浏览器调用,ip:port之后输入你想要调用的函数名字echo,?后接para1=xxx&para2=xxx·······)会立即返回如下的json结果(注意端口号要一致):

模型调用的例子

首先建立一个简单逻辑回归的模型:

#逻辑回归模型调用的例子
#例子需要处理成二分类
all.data <- iris[iris$Species != 'setosa', ]#分训练测试
set.seed(1234)
ind <- sample(2, nrow(all.data), replace = TRUE, prob = c(0.7, 0.3))
traindata <- all.data[ind == 1, ]
testdata <- all.data[ind == 2, ]
#训练模型
fit <- glm(Species ~ ., family = binomial(link = 'logit'), data = traindata)
#保存模型
save(fit, file = "fit.RData")

plumber.R如下:

# plumber.R#' Echo the parameter that was sent in
#' @param msg The message to echo back.
#' @get /predict
function(v1, v2, v3, v4){predict(fit, type = 'response', newdata = data.frame(Sepal.Length = as.numeric(v1), Sepal.Width = as.numeric(v2), Petal.Length = as.numeric(v3), Petal.Width = as.numeric(v4)))
}

脚本调用或在命令行输入:

load("fit.RData")
pr <- plumber::plumb("plumber.R")
pr$run(host = "0.0.0.0", port = 4267)

host为0.0.0.0表示其他机器可以通过该机器在局域网的ip地址调用,port指定一个端口。

接口启动后在浏览器输入127.0.0.1:4267/predict?,返回如下结果:

如果需要返回没有中括号包裹的json,在plumber.R对应的函数上方加第二行参数:

#' Echo the parameter that was sent in
#' @serializer unboxedJSON
#' @param msg The message to echo back.
#' @get /predict

Merry Christmas

公众号后台回复关键字即可学习

回复 爬虫             爬虫三大案例实战  
回复 Python        1小时破冰入门

回复 数据挖掘      R语言入门及数据挖掘
回复 人工智能      三个月入门人工智能
回复 数据分析师   数据分析师成长之路 
回复 机器学习      机器学习的商业应用
回复 数据科学      数据科学实战
回复 常用算法      常用数据挖掘算法

R工程化—Rest API 之plumber包相关推荐

  1. predict函数 R_R工程化(1) Rest API 之plumber包

    很多R使用者都会遇到这样的情境,自己建好了一个模型,预测时需要实时计算,因此需要上线与后端JAVA对接,有以下解决办法: JAVA调R语言. 以数据库或本地文件为媒介,将对应的R写成传参脚本实时计算好 ...

  2. R语言sys方法:sys.timezone函数返回当前系统时区的名称、system.File函数查找系统文件或者安装包的文件路径(例如查看R Base可安装路径、dplyr包的安装路径)

    R语言sys方法:sys.timezone函数返回当前系统时区的名称.system.File函数查找系统文件或者安装包的文件路径(例如查看R Base可安装路径.dplyr包的安装路径) 目录

  3. R语言可视化分别使用lattice包和ggplot2包可视化热图(heatmap)并绘制热力图对应的系统树图(dendrogram)实战

    R语言可视化分别使用lattice包和ggplot2包可视化热图(heatmap)并绘制热力图对应的系统树图(dendrogram)实战 目录

  4. R语言ggplot2可视化使用ggridges包可视化山脊图(Ridgeline Plots):山脊图(Ridgeline Plots)应用场景、受试者口服茶碱的之后观察茶碱的浓度变化的山脊图

    R语言ggplot2可视化使用ggridges包可视化山脊图(Ridgeline Plots):山脊图(Ridgeline Plots)应用场景.受试者口服茶碱的之后观察茶碱的浓度变化的山脊图(Rid ...

  5. R语言ggplot2可视化使用ggplot2包patchwork包在可视化结果(右上角)中插入logo图片

    R语言ggplot2可视化使用ggplot2包patchwork包在可视化结果(右上角)中插入logo图片 目录

  6. R删除数据列基于dplyr包

    R删除数据列基于dplyr包 目录 R删除数据列基于dplyr包 按列名称移除数据列 删除列表中的列 移除范围内的列

  7. R行数据过滤基于dplyr包filter函数

    R行数据过滤基于dplyr包filter函数 目录 R行数据过滤基于dplyr包filter函数 筛选等于某个值的行 使用与操作筛选行

  8. R语言·文本挖掘︱Rwordseg/rJava两包的安装(安到吐血)

    每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- R语言·文本挖掘︱Rwordseg/rJava ...

  9. R语言︱文本挖掘之中文分词包——Rwordseg包(原理、功能、详解)

    笔者寄语:与前面的RsowballC分词不同的地方在于这是一个中文的分词包,简单易懂,分词是一个非常重要的步骤,可以通过一些字典,进行特定分词.大致分析步骤如下: 数据导入--选择分词字典--分词 但 ...

  10. R语言的特征选择(Feature Selection)包:Boruta和caret

    转载自:http://www.zhizhihu.com/html/y2011/3188.html 对于大数据的分析,特征选择Feature Selection和降维是必不可少的,R有很多做FS的包,这 ...

最新文章

  1. 不安装Oracle客户端使用PLSQL
  2. python 面向对象(类)--学习笔记
  3. 思科(Cisco)IOS 12.3特性分析[ZT]
  4. 软件测试--selenium安装使用
  5. js产生两个数字之间的随机数
  6. 安装多个win10系统
  7. 梦三花重金修改服务器,2021年3月31日维护公告:新门派花果山
  8. 施乐7855维修手册中文版_GE苏伊士MK-2EPHARM EDI模块维修、清洗、注意事项
  9. Linux驱动开发(十四)---USB驱动开发学习(键盘+鼠标)
  10. 智慧水务ZWS云平台方案,共促水务行业数字化建设
  11. 戴尔联想惠普IT服务全方位比拼
  12. GO语言gin框架实战-02-Jwt和登录认证
  13. 富士康java面试题
  14. Hackbar初步了解和火狐中安装
  15. Ublox GPS模块型号入门介绍
  16. Keil MDK STM32全系列 PACK包 下载地址汇总(持续更新...)转载
  17. linux如何调试elf程序,开发一个Linux调试器就需要了解ELF和DWARF
  18. (四)联想词和top热词的设计与开发
  19. 医疗器械gsp管理软件是什么?医械经营企业必须使用吗?
  20. PostgreSQL生成测试数据

热门文章

  1. 阿里大牛程序员的Java问题排查工具单
  2. 4种软件架构,看看你属于哪个层次!
  3. 如何才能成为优秀的架构师?
  4. 手机QQ Hybrid 的架构演进
  5. 关于微信小程序(应用号),这是三节课的全部看法和建议
  6. 数据结构时间复杂度_数据结构之时间复杂度分析
  7. Zabbix 数据清理
  8. Oracle【IT实验室】数据库备份与恢复之三:OS备份/用户管理的备份与恢复
  9. junit4同一时候測试多个測试类
  10. 【C/C++】转义字符大全