2017-04-25 65 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