如果闪亮的 DT renderdatatable 中的条件

if condition in shiny DT renderdatatable

我想在 shiny 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)

如果选择 "a",该应用程序不会显示任何输出,但如果选择 "b",该应用程序将完美运行。 有人有想法吗? 谢谢

如果您将 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)
        }   
    }) 
}

反应式元素从 {} 内部获取最后一个东西。我猜你的第二个 if returns NULL 当 a 被选中时。