作者: 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语言中文社区 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。