2016-01-06 113 views
0

快速的問題上conditionalPanel爲發亮/ R。conditionalPanel在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,圖中是隱藏的文本「底」也相應上升。然而,如果所輸入的值是大於20,但小於50,圖表函數返回NULL,雖然沒有顯示圖表,文本「底部」並不向上移動。

的問題是:有沒有辦法,我可以設置一個conditionalPanel,使得它出現/根據情節功能是否返回NULL隱藏?我問的原因是因爲觸發一個有點複雜(除其他事項外這取決於輸入文件的選擇,因此需要改變,如果一個不同的文件被加載),我想,以避免編寫它在ui.R文件上。

任何建議表示歡迎,

菲利普

回答

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

太好了!謝謝,Victorp。 – PMaier