はいけい
R package:shiny を使って、
- csvファイルをアップロード
- データセットを整形
- 整形したデータセットをダウンロード
の処理を自動化できるWebアプリケーションを作っています。
もんだい
server.Rのコードをなるべくシンプルにしたいので、
関数の定義の部分を別ファイルfunctions.Rに分けて書くことにしました。
ファイルの構成
それぞれに以下の機能をもたせます
functions.R
・csvファイルの読み込み()
・整形()
・csvファイルとして出力()
server.R
・functions.Rの関数を読み込む
・ui.Rに出力する値を渡す
ui.R
・csvファイルをアプロードする
・元データ、整形したデータを表で出力(確認のため)
・ファイルのダウンロードボタン
ここで、
function(input, output) {
source("functions.R")
...
}
と書くと次のエラーが帰ってきます
'Warning: Error in <reactive:read_data>: object 'input' not found'
かいけつ
source()のオプションで、
local = TRUE の指定が必要だったらしい
function(input, output) {
source("functions.R", local = TRUE)
...
}
ドキュメントをみると…
?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現在、この記事の内容