2016-06-01 5 views
3

Shinyの反応性の振る舞いについて、下の簡単なコードを例にして明確にしたいと考えています。Shiny Reactivity Explaination(ObserveEventを使用)

アプリでyが更新されると、グラフが更新されます。
xがアプリで更新されると、グラフは更新されません。

Shinyのチュートリアルを読んでいます。私はobserveEventにtest()とplot()関数の両方をラップしているので、両方のパラメータによってグラフが更新されるべきではありません。

誰かがこの背後にある論理を説明するのに役立つことができますか?あなたがrenderPlotの内側にラインx = test(input$x)を置く場合

library(shiny) 

test <- function(x){x*2} 

shinyServer(function(input, output, session) { 

    observeEvent(input$run, { 
    x = test(input$x) 
    output$distPlot <- renderPlot({ 
     if(input$y){ 
     x = x+2 
     } 
     plot(x) 
    }) 
    }) 

}) 

shinyUI(fluidPage(

    sidebarLayout(
     sidebarPanel(
     numericInput("x", "x:", 10), 
     checkboxInput("y", label = "y", value = FALSE), 
     actionButton("run", "run") 
    ), 

    mainPanel(
     plotOutput("distPlot") 
    ) 
) 
)) 

答えて

3

それは、xまたはyの変化に反応します。基本的に、最初にアクションボタンがクリックされたときにオブザーバがリアクティブ出力を作成した後、その内部の入力に対する変更に応答するリアクティブ要素があります。希望が役立ちます。

ボタンをクリックしたときにグラフが更新されるようにするには、グラフ化されているデータをeventReactiveに入れ、グラフの入力として使用する必要があります。このような

何か:このため

data <- eventReactive(input$run, { 
    x = test(input$x) 
    if(input$y){ 
     x = x+2 
    } 
    x 
    }) 
output$distPlot <- renderPlot({ 
    plot(data()) 
}) 
+0

本当にありがとうございました。今やたくさんの意味がある – hjw

関連する問題