2016-01-06 2 views
0

Быстрый вопрос об условной панели для блестящих/R.условная панель в R/блестящая

Используя слегка модифицированный пример кода из RStudio, рассмотрим следующий простой блестящий приложение:

n <- 200 


# Define the UI 
ui <- bootstrapPage(
    numericInput('n', 'Number of obs', n), 
    conditionalPanel(condition = "input.n > 20", 
    plotOutput('plot')), 
    HTML("Bottom") 
) 

# Define the server code 
server <- function(input, output) { 
    output$plot <- renderPlot({ 
     if (input$n > 50) hist(runif(input$n)) else return(NULL) 
    }) 
} 

# Return a Shiny app object 
shinyApp(ui = ui, server = server) 

Моя цель состоит в том, чтобы скрыть график и двигаться вверх текст HTML, чтобы избежать разрыва. Теперь вы можете видеть, что если введенное значение ниже 20, график скрыт, а текст «Bottom» соответственно сдвинут вверх. Однако, если введенное значение больше 20, но меньше 50, функция диаграммы возвращает NULL, и пока диаграмма не отображается, текст «Bottom» не продвигается вверх.

Вопрос: есть ли способ, которым я могу установить условную группу, чтобы она отображалась/скрыта в зависимости от того, возвращает ли функция графика NULL? Причина, по которой я спрашиваю, заключается в том, что триггер немного сложный (помимо всего прочего, он зависит от выбора входных файлов и, следовательно, необходимо изменить, если загружен другой файл), и я бы хотел, в файле ui.R.

Любые предложения приветствуются,

Philipp

ответ

2

Привет вы можете создать условия для conditionalPanel на сервере, как это:

n <- 200 
library("shiny") 

# Define the UI 
ui <- bootstrapPage(
    numericInput('n', 'Number of obs', n), 
    conditionalPanel(condition = "output.cond == true", # here use the condition defined in the server 
        plotOutput('plot')), 
    HTML("Bottom") 
) 

# Define the server code 
server <- function(input, output, session) { 
    output$plot <- renderPlot({ 
    if (input$n > 50) hist(runif(input$n)) else return(NULL) 
    }) 
    # create a condition you use in the ui 
    output$cond <- reactive({ 
    input$n > 50 
    }) 
    outputOptions(output, "cond", suspendWhenHidden = FALSE) 
} 

# Return a Shiny app object 
shinyApp(ui = ui, server = server) 

Не забудьте добавить session в функции сервера и вызов outputOptions где-то в этой функции.

+0

Отлично! Спасибо, Викторп. – PMaier

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