R
Shiny

【R】[shiny] server,を複数ファイルに分けてsource(".R")で呼び出す

はいけい

R package:shiny を使って、

  • csvファイルをアップロード
      
  • データセットを整形
      
  • 整形したデータセットをダウンロード

の処理を自動化できるWebアプリケーションを作っています。

もんだい

server.Rのコードをなるべくシンプルにしたいので、
関数の定義の部分を別ファイルfunctions.Rに分けて書くことにしました。

ファイルの構成

スクリーンショット 2017-08-04 午後11.06.26.png


それぞれに以下の機能をもたせます

functions.R
 ・csvファイルの読み込み()
 ・整形()
 ・csvファイルとして出力()
server.R
 ・functions.Rの関数を読み込む
 ・ui.Rに出力する値を渡す
ui.R
 ・csvファイルをアプロードする
 ・元データ、整形したデータを表で出力(確認のため)
 ・ファイルのダウンロードボタン

ここで、

server.R
function(input, output) {

    source("functions.R")
    ...
}

と書くと次のエラーが帰ってきます

'Warning: Error in <reactive:read_data>: object 'input' not found'

かいけつ

source()のオプションで、
local = TRUE の指定が必要だったらしい

server.R
function(input, output) {

    source("functions.R", local = TRUE)
    ...
}

ドキュメントをみると…

R_console
?source()

Arguments
・local  

TRUE, FALSE or an environment, determining where the parsed expressions are evaluated. FALSE (the default) corresponds to the user's workspace (the global environment) and TRUE to the environment from which source is called.

source()で読み込むファイルの置き場所によってこのオプションが必要になるとのこと
working directoryに置いていないスクリプトを読み込みたい場合は、local = TRUEを追加する必要あり

今回であれば、設定されたwroking directoryにfunctions.Rがあれば、
最初のコード(local = FALSE)でも大丈夫だったらしいです

追記

2017.11.25現在、この記事の内容