【问题标题】:Shiny - conditionalPanel - set condition as output from serverShiny - conditionalPanel - 将条件设置为服务器的输出
【发布时间】:2017-06-02 07:15:28
【问题描述】:

我正在尝试构建一个闪亮的应用程序,它将能够在服务器函数中加载数据集,然后根据用户选择,然后如果有一个因子变量可以使用条件面板打开复选框。有没有办法从服务器输出变量作为条件面板的条件?

这是我尝试过的:

library(shiny)
library(caret)

ui <- fluidPage(
  selectInput('dataset', 'Select Dataset', 
              list(GermanCredit = "GermanCredit",
                  cars = "cars")),

  conditionalPanel(
    condition = "output.factorflag == true",
    checkboxInput("UseFactor", "Add Factor Variable")
  ) 
)


server <- function(input, output) {
  # Loading the dataset
  df <- reactive({
    if(input$dataset == "GermanCredit"){
      data("GermanCredit")
      df <- GermanCredit
    }else if(input$dataset == "cars"){
      data(cars)
      df <- cars
    }

    return(df)
  })

  # Loading the variables list
  col_type <- reactive({
    col_type <- rep(NA,ncol(df()))
    for(i in 1:ncol(df())){
      col_type[i] <- class(df()[,i])
    }
    return(col_type)
  }) 

  outputOptions(output, "factorflag", suspendWhenHidden = FALSE)


  output$factorflag <- reactive({
    if("factor" %in% col_type()){
      factor.flag <- TRUE
    } else {factor.flag <- FALSE}
  }
  )
}


shinyApp(ui = ui, server = server)

Thank you in advance!

【问题讨论】:

    标签: r shiny


    【解决方案1】:

    你快到了,你需要把outputOptions放在factorflag的声明之后。只是重新设计了一点你的代码:

    library(shiny)
    library(caret)
    
    ui <- fluidPage(
      selectInput('dataset', 'Select Dataset', 
                  list(GermanCredit = "GermanCredit",
                       cars = "cars")),
    
      conditionalPanel(
        condition = "output.factorflag == true",
        checkboxInput("UseFactor", "Add Factor Variable")
      ) 
    )
    
    
    server <- function(input, output) {
      # Loading the dataset
      df <- reactive({
        if(input$dataset == "GermanCredit"){
          data("GermanCredit")
          GermanCredit
        }else {
          data("cars")
          cars
        }
      })
      output$factorflag <- reactive("factor" %in% sapply(df(),class))
      outputOptions(output, "factorflag", suspendWhenHidden = FALSE)
    }
    
    shinyApp(ui = ui, server = server)
    

    【讨论】:

    • 效果很好,也感谢其他建议!
    • 带模块,需要使用ns函数:condition = paste0("output['", ns("factorflag"), "'] == true")
    猜你喜欢
    • 2021-11-15
    • 2018-03-09
    • 1970-01-01
    • 2021-01-07
    • 2019-09-20
    • 2019-05-15
    • 2016-02-03
    • 1970-01-01
    • 2021-12-11
    相关资源
    最近更新 更多