R工程化—Rest API 之plumber包
作者:stone R语言中文社区专栏作者
知乎ID:
https://zhuanlan.zhihu.com/p/50987545
很多R使用者都会遇到这样的情境,自己建好了一个模型,预测时需要实时计算,因此需要上线与后端JAVA对接,有以下解决办法:
JAVA调R语言。
以数据库或本地文件为媒介,将对应的R写成传参脚本实时计算好入库或者生成本地文件,再读取结果。
封装成传参的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¶2=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包相关推荐
- predict函数 R_R工程化(1) Rest API 之plumber包
很多R使用者都会遇到这样的情境,自己建好了一个模型,预测时需要实时计算,因此需要上线与后端JAVA对接,有以下解决办法: JAVA调R语言. 以数据库或本地文件为媒介,将对应的R写成传参脚本实时计算好 ...
- R语言sys方法:sys.timezone函数返回当前系统时区的名称、system.File函数查找系统文件或者安装包的文件路径(例如查看R Base可安装路径、dplyr包的安装路径)
R语言sys方法:sys.timezone函数返回当前系统时区的名称.system.File函数查找系统文件或者安装包的文件路径(例如查看R Base可安装路径.dplyr包的安装路径) 目录
- R语言可视化分别使用lattice包和ggplot2包可视化热图(heatmap)并绘制热力图对应的系统树图(dendrogram)实战
R语言可视化分别使用lattice包和ggplot2包可视化热图(heatmap)并绘制热力图对应的系统树图(dendrogram)实战 目录
- R语言ggplot2可视化使用ggridges包可视化山脊图(Ridgeline Plots):山脊图(Ridgeline Plots)应用场景、受试者口服茶碱的之后观察茶碱的浓度变化的山脊图
R语言ggplot2可视化使用ggridges包可视化山脊图(Ridgeline Plots):山脊图(Ridgeline Plots)应用场景.受试者口服茶碱的之后观察茶碱的浓度变化的山脊图(Rid ...
- R语言ggplot2可视化使用ggplot2包patchwork包在可视化结果(右上角)中插入logo图片
R语言ggplot2可视化使用ggplot2包patchwork包在可视化结果(右上角)中插入logo图片 目录
- R删除数据列基于dplyr包
R删除数据列基于dplyr包 目录 R删除数据列基于dplyr包 按列名称移除数据列 删除列表中的列 移除范围内的列
- R行数据过滤基于dplyr包filter函数
R行数据过滤基于dplyr包filter函数 目录 R行数据过滤基于dplyr包filter函数 筛选等于某个值的行 使用与操作筛选行
- R语言·文本挖掘︱Rwordseg/rJava两包的安装(安到吐血)
每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- R语言·文本挖掘︱Rwordseg/rJava ...
- R语言︱文本挖掘之中文分词包——Rwordseg包(原理、功能、详解)
笔者寄语:与前面的RsowballC分词不同的地方在于这是一个中文的分词包,简单易懂,分词是一个非常重要的步骤,可以通过一些字典,进行特定分词.大致分析步骤如下: 数据导入--选择分词字典--分词 但 ...
- R语言的特征选择(Feature Selection)包:Boruta和caret
转载自:http://www.zhizhihu.com/html/y2011/3188.html 对于大数据的分析,特征选择Feature Selection和降维是必不可少的,R有很多做FS的包,这 ...
最新文章
- 不安装Oracle客户端使用PLSQL
- python 面向对象(类)--学习笔记
- 思科(Cisco)IOS 12.3特性分析[ZT]
- 软件测试--selenium安装使用
- js产生两个数字之间的随机数
- 安装多个win10系统
- 梦三花重金修改服务器,2021年3月31日维护公告:新门派花果山
- 施乐7855维修手册中文版_GE苏伊士MK-2EPHARM EDI模块维修、清洗、注意事项
- Linux驱动开发(十四)---USB驱动开发学习(键盘+鼠标)
- 智慧水务ZWS云平台方案,共促水务行业数字化建设
- 戴尔联想惠普IT服务全方位比拼
- GO语言gin框架实战-02-Jwt和登录认证
- 富士康java面试题
- Hackbar初步了解和火狐中安装
- Ublox GPS模块型号入门介绍
- Keil MDK STM32全系列 PACK包 下载地址汇总(持续更新...)转载
- linux如何调试elf程序,开发一个Linux调试器就需要了解ELF和DWARF
- (四)联想词和top热词的设计与开发
- 医疗器械gsp管理软件是什么?医械经营企业必须使用吗?
- PostgreSQL生成测试数据