Shiny R闪亮-无法在主面板中显示基于“的数据表”;选择输入";用户选择

Shiny R闪亮-无法在主面板中显示基于“的数据表”;选择输入";用户选择,shiny,shinydashboard,shinyapps,shiny-reactivity,Shiny,Shinydashboard,Shinyapps,Shiny Reactivity,我试图根据用户从下拉列表中的选择在主面板中显示一个表 例如,“selectInput”下拉列表将具有表789中的值(选项为123,xyz,…) 如果用户选择123,则必须显示“table123”,否则将显示“table456” 我对shiny很陌生,尝试了下面的内容,得到了“尝试复制“closure”类型的对象”错误。我不确定我错过了什么。有人能帮忙吗 服务器: server = function(input, output, session) { output$outputt

我试图根据用户从下拉列表中的选择在主面板中显示一个表

例如,“selectInput”下拉列表将具有表789中的值(选项为123,xyz,…) 如果用户选择123,则必须显示“table123”,否则将显示“table456”

我对shiny很陌生,尝试了下面的内容,得到了“尝试复制“closure”类型的对象”错误。我不确定我错过了什么。有人能帮忙吗

服务器:

    server = function(input, output, session) {
  
  output$outputtable = reactive({ifelse(input$selction == '123', DT::renderDataTable(table123), DT::renderDataTable(table456)) })
  
}

用户界面:


ui我认为您在这里混为一谈,您不应该将
renderDataTable
放入
reactive
,这应该可以:

library(shiny)

table789 <- mtcars
table456 <- iris
table123 <- mtcars
table789$column1 <- sample(c("123","456"),nrow(table789),replace = T)


ui <- fluidPage(
    
    sidebarPanel(selectInput("selection", "Select", choices = unique(table789$column1), selected = "xyz")),
    
    mainPanel(
        tabsetPanel(
            tabPanel("select", 
                     DT::dataTableOutput("outputtable")
            )
        )
    )
)

server = function(input, output, session) {
    
    
    data <- eventReactive(input$selection,{
        if(input$selection == "123"){
            return (table123)
        }
        table456
    })
    
    output$outputtable <- DT::renderDataTable(
        data()
    )
    
}

#Run the app
shinyApp(ui = ui, server = server)
库(闪亮)

表789成功了!!!非常感谢您的迅速回复!!!但我真的不明白为什么“ifelse”在这种情况下不起作用。他们之间有什么区别?如果条件为TRUE,您也使用了“return()”,但对于FALSE条件,则不使用。你能解释一下吗?如果你看一下
?ifelse
,你会看到
ifelse返回一个与test形状相同的值…
它不是
数据框
谢谢你的帮助,猪排先生!!!
library(shiny)

table789 <- mtcars
table456 <- iris
table123 <- mtcars
table789$column1 <- sample(c("123","456"),nrow(table789),replace = T)


ui <- fluidPage(
    
    sidebarPanel(selectInput("selection", "Select", choices = unique(table789$column1), selected = "xyz")),
    
    mainPanel(
        tabsetPanel(
            tabPanel("select", 
                     DT::dataTableOutput("outputtable")
            )
        )
    )
)

server = function(input, output, session) {
    
    
    data <- eventReactive(input$selection,{
        if(input$selection == "123"){
            return (table123)
        }
        table456
    })
    
    output$outputtable <- DT::renderDataTable(
        data()
    )
    
}

#Run the app
shinyApp(ui = ui, server = server)