スコープ上で光沢のあるヘルプarticleを通過しましたが、global object hereの設定に関する回答もあります。しかし、私がしなければならないこと(私が思うもの)については言及していません。出力関数内に変数しか作成されていない場合は、を別の変数で見ることはできますか?アクションボタンを使用して、私は長い計算を制御しようとしていますが、いくつかは他のことが起こっている状態でのみ起こります。最小の例として、出力関数間のスコープ
library(shiny)
library(stringr)
fruitref <- c("apple","peach","pear","plum","banana","kiwi")
textareaInput <- function(inputID, label, value="", rows=10, columns=30) {
HTML(paste0('<div class="form-group shiny-input-container">
<label for="', inputID, '">', label,'</label>
<textarea id="', inputID, '" rows="', rows,'" cols="',
columns,'">', value, '</textarea></div>'))
}
ui <- fluidPage(titlePanel("minimal example"),
sidebarLayout(
sidebarPanel(
textareaInput("inputfruit", "Enter some fruits:"),
actionButton("checkfruit", "Check fruits"),
verbatimTextOutput("fruitstat")
),
mainPanel(
textOutput("fruits")
)
)
)
server <- function(input,output){
flag <- F
inputs <- eventReactive(input$checkfruit,{input$inputfruit})
continue <- reactive(flag)
output$fruitstat <- renderText({
inputs <- inputs()
inputs <- str_trim(unlist(strsplit(inputs,split="\n")),side="both")
if(length(setdiff(inputs,fruitref)) != 0 | length(inputs) == 0){
flag <- F
paste(paste(setdiff(inputs,fruitref), collapse=", "),"not in table.")
} else {
flag <- T
"All fruits ok."
}
})
output$fruits <- renderText({
paste("Continue? ",continue())
})
}
shinyApp(ui = ui, server = server)
参照テーブルがあり、そのテーブルに対してユーザー入力が確認されています。ユーザーは、チェックボタンを押すまでリストを入力し、すべてがOKかどうか、または不一致があるかどうかのフィードバックを取得します。すべてが大丈夫ならば、私は続行したい。私は出力関数で "continue"フラグを設定しようとしましたが、それはうまくいかず、出力関数の外のサーバーで値を更新しませんでした。私はまた、サーバー関数で環境を作成してassignを使用してみましたが、あとでrenderTextの値を取得しようとしたときに値を更新しませんでした。入力$でアクセスできる入力ではないので、私は更新*機能を使用できないと考えました。
これは、この種の条件を設定する最良の方法ではありません。私はチュートリアルで条件付きペインを見ましたが、それは関数で作成されたものではなく、入力に依存します。より一般的には、出力関数にはもっと複雑なオブジェクトが作成されます(4つの大きなテーブルとプロットがありますが、すべてまたは一部のサブセットが実際に出力されます)、他の出力関数には表示されるはずです。後のことが起こるまで計算することができないので、それらを反応的なグローバルオブジェクトと定義することができます。