具有选择变量、变量级别和添加其他列的三个输入

Shiny with three inputs of selecting variable, its levels and adding other columns

从代码来看,服务器中的 renderUI 与主变量选择断开连接,因此将 textOutput() 打印到主面板。

我正在尝试构建一个闪亮的应用程序,在

的侧边栏有三个输入
  1. 选择主变量
  2. 选择的主要变量水平(多个)
  3. 添加列的选项,然后在主面板打印所选数据

例如,虹膜,

  1. 我选择物种
  2. 级别应显示“setosa”“versicolor”“virginica”选项,但 未显示
  3. 我可以添加其他列 但所选的行和列未在主面板打印
data <- iris


ui <- fluidPage(
  
  titlePanel("Data selection"),
  sidebarLayout(
    sidebarPanel(
      selectizeInput("show_vars", "Main column:",
                     choices = colnames(data), multiple = FALSE),
      uiOutput("category1"),
      selectInput("add_col", "Add columns to display", names(data), multiple = TRUE)
    ),
    mainPanel(
      textOutput("selected")
    )
  )
)

server <- function(input, output,session) {

  output$category1 <- renderUI({
    selectizeInput('cat1', 'Levels from main column', choices = levels(input$show_vars), multiple = TRUE)
  })
  
  
  df_subset <- eventReactive(input$cat1,{
    columns = names(data)
    if(input$cat1=="All") {df_subset <- data}
    else{df_subset <- data[data$Category1 == input$cat1, columns]}
  })
  
  output$selected <- renderText({ df_subset() })
}


shinyApp(ui, server)

也许您正在寻找这个

data <- iris


ui <- fluidPage(
  
  titlePanel("Data selection"),
  sidebarLayout(
    sidebarPanel(
      selectInput("show_vars", "Main column:",
                     choices = colnames(data), multiple = FALSE),
      uiOutput("category1"),
      selectInput("add_col", "Add columns to display", names(data), multiple = TRUE)
    ),
    mainPanel(
      DTOutput("selected")
    )
  )
)

server <- function(input, output,session) {
  
  output$category1 <- renderUI({
    req(input$show_vars)
    selectInput('cat1', 'Levels from main column', choices = c('All',levels(data[,input$show_vars])), multiple = TRUE)
  })
  
  
  df_subset <- reactive({
    req(input$cat1,input$add_col)
    columns <-  names(data) %in% input$add_col
    if(input$cat1=="All") {dfsubset <- data[,columns]}
    else {dfsubset <- data[data[,input$show_vars] == input$cat1, columns]}
    dfsubset <- as.data.frame(dfsubset)
  })
  
  output$selected <- renderDT({ df_subset() })
}

shinyApp(ui, server)