如果条件在闪亮的DT renderdatatable

时间:2017-05-02 13:59:52

标签: r shiny dt

我想在闪亮的DT :: renderDataTable中使用if条件,但它无法正常工作。 这是一个最小的例子:

library(DT)
library(shiny)

ui <- shinyUI(fluidPage(
  titlePanel(""),

  sidebarLayout(
    sidebarPanel(radioButtons("button", "", choices=c("a", "b"))),
      mainPanel(DT::dataTableOutput("table1")) 
  )
))

server <- function(input, output){
 x <- data.frame(col1 = 1:2, col2 = 3:4, col3 =5:6)
 y <- data.frame(col1 = 10:11, col2 = 20:21)

 output$table1 <- DT::renderDataTable({
   if(input$button == "a"){
     datatable(x)
   }
   if(input$button == "b"){
     datatable(y)
   }
   })
}

shinyApp(ui, server)

该应用不会显示任何输出,如果&#34; a&#34;被选中,但如果&#34; b&#34;被选中。 有没有人有想法? 感谢。

1 个答案:

答案 0 :(得分:2)

如果您将if结构更改为else if,它将起作用。

server <- function(input, output){   
    x <- data.frame(col1 = 1:2, col2 = 3:4, col3 =5:6)   
    y <- data.frame(col1 = 10:11, col2 = 20:21)
    output$table1 <- DT::renderDataTable({
        if(input$button == "a"){
          datatable(x)
        }
        else if(input$button == "b"){
          datatable(y)
        }   
    }) 
}

反应元素从{}中取出最后一个元素。我想你的第二个如果在选择a时返回NULL。