LoginSignup
16
15

More than 5 years have passed since last update.

RのコードをREST API化してNode-REDで叩いてみた

Last updated at Posted at 2016-04-19

はじめに

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を叩いてみる

Node-RED 2016-04-19 16-51-43.png

見た目はこれだけです。http requestノードでmethodとURLを指定し、パラメータは?で渡します。

Node-RED 2016-04-19 16-52-25.png

すると、debugノードから、以下のようにランダムサンプルの平均値がでていることが確認できます。
Node-RED 2016-04-19 16-54-12.png

コード

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": []
}]
16
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
15