2017-02-21 6 views
1

データをフィルタリングするために使用されるリアクティブビットのUIを持つ光沢のあるアプリがあります。私はプロットのためにデータを使用します。私のリアクションビットのUIは、変数のすべての可能な値をチェックし、selectizeInputの選択肢として提供し、選択したすべての選択肢から始めます。私の実際のアプリケーションでは、フィルターの変更を実行するにはかなりの時間がかかるので、私はsubmitButtonを持っていますので、アプリが絶えず更新されるのを防ぐことができます。唯一の問題は、アプリケーションの初期起動時です。選択肢を動的UIにロードして選択しますが、さらなる反応性がsubmitButtonによってブロックされるため、この情報はプロットに到達しないため、空のプロットが表示されます。希望の結果を得るために必要なのは、です。これが完了すると、アプリは必要に応じて動作します。光沢のあるアプリの起動時にsubmitButtonの効果を抑制する

最初にsubmitButtonを押すことなくプロットを表示する方法を探しています。私の次のおもちゃの例では、これはsubmitButtonactionButtonに置き換えることによって、おそらく非常に簡単に行うことができます。これは、すべての反応性がフリーズしているわけではなく、submitButtonを含む多くの問題の解決策です。しかし、私の実際のアプリでは多くの入力と反応の源があるので、actionButtonの設定とobserveEventでのすべての所望の効果のキャプチャは、submitButtonが唯一の問題を起動しているときには非常に面倒です。最初の起動時にプロットショーを行うことができる他の方法はありますか?それ以降はsubmitButtonの動作に従ってください。

例のアプリ:

library(shiny) 
library(ggplot2) 

ui <- fluidPage(
    sidebarLayout(
    sidebarPanel( 
     uiOutput("Cylselectui"), 
     submitButton("Apply changes") 
    ), 
    mainPanel(
    plotOutput("Carsplot") 
    ) 
) 
) 


server <- function(input, output) { 
    output$Carsplot <- renderPlot({ 
    plotdata <- subset(mtcars, cyl %in% input$Cylselection) #Filter based on cyl 

    ggplot(plotdata, aes(x = mpg, y = hp, colour = factor(cyl))) + #Create plot 
     geom_point() 
    }) 

    output$Cylselectui <- renderUI({ #Create the cyl selectize ui based on the values of cyl that are in the data 
    selectizeInput(
     'Cylselection', 'Select by Cylinder', 
     choices = sort(unique(mtcars$cyl)), 
     selected = sort(unique(mtcars$cyl)), 
     multiple = TRUE 
    ) 
    }) 
} 

shinyApp(ui = ui, server = server) 

答えて

1

あなたが入力(1回目)nullであるかどうかを確認するためにreactiveを使用して、あなたのデフォルト値を提供することができます。

Cylselection <- reactive({ 
    if(is.null(input$Cylselection)) 
     sort(unique(mtcars$cyl)) 
    else 
     input$Cylselection}) 

    output$Carsplot <- renderPlot({ 
    plotdata <- subset(mtcars, cyl %in% Cylselection()) #Filter based on cyl 
    ggplot(plotdata, aes(x = mpg, y = hp, colour = factor(cyl))) + #Create plot 
     geom_point() 
    }) 

よりエレガントに置くことですリアクティブのデータサブセット:

plotdata <- reactive({ 
    if(is.null(input$Cylselection)) 
     mtcars 
    else 
     subset(mtcars, cyl %in% input$Cylselection)}) 

    output$Carsplot <- renderPlot({ 
    ggplot(plotdata(), aes(x = mpg, y = hp, colour = factor(cyl))) + #Create plot 
     geom_point() 
    }) 
関連する問題