2016-10-27 4 views
1

は、inputoutputオブジェクトよりも柔軟性があるため、Shinyで多く使用しています。ネストされたreactiveValuesは、いずれかの子のいずれかの変更が親にリンクされた反応性をトリガーするので、トリッキーです。この問題を回避するために、2つの異なるreactiveValuesオブジェクトを作成しようとしました(同じリストに2つのオブジェクトはありませんが、2つの異なるリストがあります)、動作しているようです。私はこれの例を見つけることができず、このように動作するかどうかを調べたいと思っています。このために発生する可能性のある問題はありますか?複数のreactiveValues Shiny Appで

このアプリケーションでは、reac1reac2という2つの無効値オブジェクトがあります。それぞれ、ドロップダウンにリンクされており、それぞれcolumn1column2です。 column1またはcolumn2を変更すると、リアクティブ値が最新の時刻に更新され、プロットが更新され、最新の値がreac1およびreac2に出力されます。

ui = fluidPage(
    titlePanel("Multiple reactive values"), 
    sidebarLayout(
    sidebarPanel(
     selectInput(inputId = "column1", "Reac1", letters, selected = "a"), 
     selectInput(inputId = "column2", "Reac2", letters, selected = "a") 
    ), 
    mainPanel(
     plotOutput("plot1") 
    ) 
) 
) 

server = function(input, output, session) { 
    reac1 <- reactiveValues(asdasd = 0) 
    reac2 <- reactiveValues(qweqwe = 0) 

    # If any inputs are changed, set the redraw parameter to FALSE 
    observe({ 
    input$column2 
    reac2$qweqwe = Sys.time() 
    }) 

observe({ 
    input$column1 
    reac1$asdasd = Sys.time() 
    }) 


    # Only triggered when the copies of the inputs in reac are updated 
    # by the code above 
    output$plot1 <- renderPlot({ 
     print(paste(reac1$asdasd, 'reac1')) 
     print(paste(reac2$qweqwe, 'reac2')) 
     hist(runif(1000)) 
    }) 
} 
shinyApp(ui, server) 
+0

私は同意すると、光沢のある文書や例ではあまりよく書かれていませんが、reactiveValuesは他の光沢のある表現よりも便利であることがわかりました。この質問をご覧くださいhttp://stackoverflow.com/questions/39436713。あなたの特定の例では、1つのreactiveValueで動作します。あなたが参照している問題のコード例を表示できますか? –

+0

私の変数を整理しておくために、私はreactValueの要素の1つとしてリストを持っていたいと思います。(reactelValues(somelist = list(a = 1、b = 1、c = 1))のようなものです) 。このリストには、さまざまな場所で使用される複数の要素があります。今、私がこのリストの1つの要素を更新すると、 'a'と答えると、反応は' somelist'に渡されるようです。したがって、 'b 'が変更されていなくても、' somelist $ b'を呼び出す他のチャンクもトリガされます。 – TheComeOnMan

答えて

0

ReactiveValuesは入力$の読み取り/書き込みバージョンと似ており、1つのreactiveValueリスト内に複数の '独立変数'を持つことができます。したがって、あなたの例では2つの反応的な値は必要ありません。以下のコードを参照してください。

ui = fluidPage(
    titlePanel("Multiple reactive values"), 
    sidebarLayout(
    sidebarPanel(
     selectInput(inputId = "column1", "Reac1", letters, selected = "a"), 
     selectInput(inputId = "column2", "Reac2", letters, selected = "a") 
    ), 
    mainPanel(
     verbatimTextOutput("txt1"), 
     verbatimTextOutput("txt2") 
    ) 
) 
) 

server = function(input, output, session) { 
    reac <- reactiveValues() 
    #reac2 <- reactiveValues(qweqwe = 0) 

    # If any inputs are changed, set the redraw parameter to FALSE 

    observe({ 
    reac$asdasd = input$column1 
    }) 
    observe({ 
    reac$qweqwe = input$column2 
    }) 

    # Only triggered when the copies of the inputs in reac are updated 
    # by the code above 
    output$txt1 <- renderPrint({ 
    print('output 1') 
    print(paste(reac$asdasd, 'reac1')) 
    }) 

    output$txt2 <- renderPrint({ 
    print('output2') 
    print(paste(reac$qweqwe, 'reac2')) 
    }) 

} 
shinyApp(ui, server) 
+0

私のコメントで言及したようにロジックのために、私はこれらの値のいくつかをクラブにしたいと思います。私の質問では、reac1とreac2はreactiveValuesの2つの論理的なグループです。それを動かすもう一つの方法は、リスト 'reactveValues(somelist = list(a = 1、b = 1、c = 1))) 'を持っていただろうが、それは私のコメントでも述べた問題を引き起こす。私はこのためのコードを追加しようとします。 – TheComeOnMan

関連する問題