ShinyServerで引数をURLから与える
ShinyServerはクライアントにR環境がなくてもRプログラムをWEBアプリ化することができる。分析などに条件が必要な場合は一般的にui.Rに記述するが、URLに引数として与えることも出来るので他のWEBアプリとの連携も可能みたいだ。このようにGETパラメータ的な実行が可能。
http://xxx.xxx.xxx.xxx:3838/appname/?args1=aaa&args2=bbb&args3=ccc
ポイント
出力部になるserver.Rに記述するshinyServer関数にsessionという引数を追加する。session$clientData$url_searchで受け取り、parseQueryString関数でパースすることが出来る。あとは、その引数に応じたプログラムを実行し結果を出力すれば良い。
shinyServer(function(input, output, session) { # Parse the GET query string output$queryText <- renderText({ query <- parseQueryString(session$clientData$url_search) # Return a string with key-value pairs paste(names(query), query, sep = "=", collapse=", ") }) })
parseQueryString関数はshinyパッケージに存在する。ShinyServerがなくても確認可能。
> library(shiny) > query <- parseQueryString('?args1=aaa&args2=bbb&args3=ccc') > str(query) List of 3 $ args1: chr "aaa" $ args2: chr "bbb" $ args3: chr "ccc" > query $args1 [1] "aaa" $args2 [1] "bbb" $args3 [1] "ccc" >
k-meansの分類数などを引数にして可視化してみた
irisデータを使用。引数はcenters、iter.max、nstartのk-meansのパラメータ3つ。実行はこんな感じになる。
http://xxx.xxx.xxx.xxx:3838/appname/?k=3&im=100&ns=1000
準備するRコードはこの通り。※テキストとグラフの2つを出力
ui.R
shinyUI(bootstrapPage( h3("Parsed query string"), verbatimTextOutput("queryText"), h3("Plot"), plotOutput("Plot") ))
server.R
shinyServer(function(input, output, session) { output$queryText <- renderText({ query <- parseQueryString(session$clientData$url_search) paste(names(query), query, sep = "=", collapse=", ") }) output$Plot <- renderPlot({ query <- parseQueryString(session$clientData$url_search) cl <- kmeans(iris[,1:4], centers=as.numeric(query$k), iter.max=as.numeric(query$im), nstart=as.numeric(query$ns)) plot(iris[,1:4], col=cl$cluster) }) })