Shiny - conditionalPanel - atur kondisi sebagai output dari server

Saya mencoba membangun aplikasi mengkilap yang dapat memuat kumpulan data di fungsi server dan kemudian berdasarkan pilihan pengguna dan kemudian jika ada variabel faktor untuk membuka kotak centang menggunakan conditionalPanel. apakah ada cara untuk mengeluarkan variabel dari server sebagai kondisi CondtionalPanel?

Inilah yang saya coba:

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!

person Rami Krispin    schedule 18.01.2017    source sumber


Jawaban (1)


Anda hampir sampai, Anda harus meletakkan outputOptions setelah deklarasi factorflag. Baru saja merekayasa ulang sedikit kode Anda:

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)
person HubertL    schedule 18.01.2017
comment
Itu berfungsi dengan baik, terima kasih juga atas saran lainnya! - person Rami Krispin; 18.01.2017
comment
Dengan modul, perlu menggunakan fungsi ns: condition = paste0("output['", ns("factorflag"), "'] == true") - person Maximilian Mordig; 12.03.2020