はじめに
RとNode-REDを使っていると、Node-REDで集めたデータを元に何か分析したい!ということありますよね?そういう時のための、RのコードをREST API化してNode-REDで叩く方法です。
環境
Mac OSX Yosemite: 10.10.5
Node-RED version: v0.11.0
Node.js version: v0.12.7
手法
Rにplumber packageをインストール
RのコードをそのままREST API化してくれるパッケージ、plumber packageをRにインストールします。
Rのコードを書く
plumberのサイトにあるサンプルコードを書き、保存します。
# myfile.R
#* @get /mean
normalMean <- function(samples=10){
data <- rnorm(samples)
mean(data)
}
コードをREST API化する
plumberのサイトにある通り、以下をRで実行すると、REST API化ができます。
```
library(plumber)
r <- plumb("myfile.R") # Where 'myfile.R' is the location of the file shown above
r$run(port=8000)
```
Node-REDからRのREST APIを叩いてみる
見た目はこれだけです。http requestノードでmethodとURLを指定し、パラメータは?で渡します。
すると、debugノードから、以下のようにランダムサンプルの平均値がでていることが確認できます。
コード
Node-red
[{
"id": "77f161df.880ea",
"type": "http request",
"name": "",
"method": "GET",
"ret": "txt",
"url": "http://localhost:8000/mean?samples=10000",
"x": 305,
"y": 133,
"z": "b5890722.4a76f8",
"wires": [
["a5ebd5d7.5a1428"]
]
}, {
"id": "95eedbed.6a1128",
"type": "inject",
"name": "",
"topic": "",
"payload": "",
"payloadType": "date",
"repeat": "",
"crontab": "",
"once": false,
"x": 108,
"y": 133,
"z": "b5890722.4a76f8",
"wires": [
["77f161df.880ea"]
]
}, {
"id": "a5ebd5d7.5a1428",
"type": "debug",
"name": "",
"active": true,
"console": "false",
"complete": "false",
"x": 522,
"y": 134,
"z": "b5890722.4a76f8",
"wires": []
}]