2017-04-25 66 views
1

介紹如何在閃亮的應用

初始化默認值呈現項目在shinyApp,我想渲染動態輸入輸出。

我的問題是,使用shinydashboard和不同的選項卡時,*Input()的默認值僅在各個選項卡被激活(想到輸入和輸出選項卡)時纔會呈現。

當在一個簡單的例子中使用input$*值的switch語句時(除非在輸入之後,switch確實工作並且輸出出現),我得到相同的行爲。請參閱以下內容:

代碼

library(shiny) 
shinyApp(
    ui = shinyUI(fluidPage(sidebarLayout(sidebarPanel(uiOutput("select_bin")), 
             mainPanel(plotOutput("distPlot"))))), 
    server = function(input, output) { 
    output$select_bin <- renderUI({ 
     selectInput("bins", "Number of bins:", c("few", "many")) 
    }) 
    output$distPlot <- renderPlot({ 
     x <- faithful[, 2] 
     bins <- switch(input$bins, few = 10L, many = 100L) 
     bins <- seq(min(x), max(x), length.out = bins) 
     hist(x, breaks = bins, col = 'darkgray', border = 'white') 
    }) 
    }) 

上述工程的代碼,而是拋出一個

Warning: Error in switch: EXPR must be a length 1 vector

我想input$bins不可用,直到selectInput呈現。

問題

我如何定義input$bins的默認值,所以selectInput呈現之前,在renderPlot表達不會引發報警?

第一種方法

我試圖用observethis post,但我不知道它的確切含義,因此很難解決的問題。

library(shiny) 
shinyApp(
    ui = shinyUI(fluidPage(sidebarLayout(sidebarPanel(uiOutput("select_bin")), 
             mainPanel(plotOutput("distPlot"))))), 
    server = function(input, output) { 
    output$select_bin <- renderUI({ 
     selectInput("bins", "Number of bins:", c("few", "many")) 
    }) 
    observe({ 
     bins <- switch(input$bins, few = 10L, many = 100L) 
     bins 
    }) 
    output$distPlot <- renderPlot({ 
     x <- faithful[, 2] 
     bins <- seq(min(x), max(x), length.out = bins) 
     hist(x, breaks = bins, col = 'darkgray', border = 'white') 
    }) 
    }) 

哪一個根本不起作用並拋出額外的Warning: Error in seq.default: object 'bins' not found

回答

1

使用

  • reactiveValues創建缺省值的列表,並
  • observeEventinput$bins,更新默認

似乎解決了問題:

library(shiny) 
shinyApp(
    ui = shinyUI(fluidPage(sidebarLayout(sidebarPanel(uiOutput("select_bin")), 
             mainPanel(plotOutput("distPlot"))))), 
    server = function(input, output) { 
    values <- reactiveValues(bins = 10L) 
    output$select_bin <- renderUI({ 
     selectInput("bins", "Number of bins:", c("few", "many")) 
    }) 
    observeEvent(input$bins, { 
     values$bins <- switch(input$bins, few = 10L, many = 100L) 
    }) 
    output$distPlot <- renderPlot({ 
     x <- faithful[, 2] 
     bins <- seq(min(x), max(x), length.out = values$bins) 
     hist(x, breaks = bins, col = 'darkgray', border = 'white') 
    }) 
    }) 
1

需要。只有input$bins不爲空時,req()纔會告訴閃爍以呈現該圖。

library(shiny) 
shinyApp(
    ui = 
shinyUI(fluidPage(sidebarLayout(sidebarPanel(uiOutput("select_bin")), 
            mainPanel( 
plotOutput("distPlot"))))), 
    server = function(input, output) { 
    output$select_bin <- renderUI({ 
     selectInput("bins", "Number of bins:", c("few", "many")) 
    }) 
    output$distPlot <- renderPlot({ 
     req(input$bins) 
     x <- faithful[, 2] 
     bins <- switch(input$bins, few = 10L, many = 100L) 
     bins <- seq(min(x), max(x), length.out = bins) 
     hist(x, breaks = bins, col = 'darkgray', border = 'white') 
    }) 
    }) 
+0

謝謝您的解決方案。可以省略警告,但不允許在默認情況下顯示劇情(使用shinydashboard和選項卡)。儘管如此+1。 – setempler

+0

@setempler我敢打賭,你沒有把'active = T'放在默認標籤中...... – Hao

+0

的確,我只知道'menuItem()'中的'selected = T'。在'中找不到'active'參數?shinydashboard :: tabItems'。我想念什麼? – setempler