2017-01-18 2 views
0

Я пытаюсь создать приложение в блестящем состоянии, которое сможет загрузить набор данных в функции сервера, а затем на основе выбора пользователя, а затем, если есть фактор-переменная, открыть флажок с помощью условной панели. есть способ вывода переменной с сервера в качестве условия condtionalPanel?Shiny - conditionalPanel - установить условие как вывод с сервера

Вот что я пробовал:

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! 

ответ

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

Это отлично работает, а также за другие предложения! –

Смежные вопросы