2017-01-18 3 views
0

Ich versuche, eine App in glänzend zu bauen, die in der Lage ist, ein Dataset in der Serverfunktion zu laden und dann basierend auf dem Benutzer wählen und dann, wenn es eine Faktorvariable ist Öffnen Sie das Kontrollkästchen mit ConditionalPanel. Gibt es eine Möglichkeit, Variablen vom Server als Bedingung für das ConditionalPanel auszugeben?Shiny - conditionalPanel - setze Bedingung als Ausgabe vom Server

Hier ist, was ich versucht:

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! 

Antwort

1

Sie fast da waren, müssen Sie die outputOptions nach der Erklärung der factorflag setzen. Just reengineered ein bisschen Ihren Code:

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) 
+0

Das funktioniert gut, auch danke für die anderen Vorschläge! –

Verwandte Themen