有关有光泽/ 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文件上编码。
欢迎任何建议,
菲利普
答案 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
。