闪亮的三个输入选择变量,它的水平和添加其他列

Posted

技术标签:

【中文标题】闪亮的三个输入选择变量,它的水平和添加其他列【英文标题】:Shiny with three inputs of selecting variable, its levels and adding other columns 【发布时间】:2021-02-21 22:57:57 【问题描述】:

从代码来看,server中的renderUI与主变量选择是断开的,所以打印textOutput()到主面板。

我正在尝试构建一个闪亮的应用,在侧边栏有三个输入

    选择主变量 要选择的选定主变量的级别(多个) 添加列的选项,然后在主面板打印所选数据

例如,用虹膜,

    我选择物种 级别应该显示“setosa”“versicolor”“virginica”选项,但没有显示 我可以添加其他列 但是选择的行和列没有打印在主面板上
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
    elsedf_subset <- data[data$Category1 == input$cat1, columns]
  )
  
  output$selected <- renderText( df_subset() )



shinyApp(ui, server)

【问题讨论】:

choices =c("All", levels(data[,input$show_vars])) 最好将renderText替换为renderTabletextOutput替换为tableOutput @HubertL,我猜我们俩同时在看同一个问题...... 【参考方案1】:

也许你正在寻找这个

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)

【讨论】:

以上是关于闪亮的三个输入选择变量,它的水平和添加其他列的主要内容,如果未能解决你的问题,请参考以下文章

R中闪亮的反应选择输入

用于多个输入的闪亮 updateSelectInput

根据 R Shiny 中的其他选择动态更新两个 selectInput 框

R闪亮的选择输入反应性

如何在不缩小r闪亮中的矩阵大小的情况下向输入矩阵添加列?

更改输入时闪亮会抛出警告:错误:无法提取不存在的列