R /闪亮的conditionalPanel

时间:2016-01-06 15:38:26

标签: r shiny

有关有光泽/ R的conditionalPanel的快速提问。

使用来自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,则隐藏图形并显示文本&#34; Bottom&#34;相应地向上移动。但是,如果输入的值大于20但小于50,则图表函数返回NULL,而没有显示图表,则文本&#34; Bottom&#34;没有动起来。

问题是:有没有办法可以设置一个conditionalPanel,使其根据绘图函数是否返回NULL而显示/隐藏?我问的原因是因为触发器有点复杂(除其他外,它取决于输入文件的选择,因此如果加载了不同的文件需要更改),我想避免必须在ui.R文件上编码。

欢迎任何建议,

菲利普

1 个答案:

答案 0 :(得分: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