我有一个闪亮的应用程序,其中包含一个用于过滤数据的反应位。然后我使用数据进行绘图。我的UI反应位检查变量的所有可能值,将它们作为selectizeInput
中的选项提供,并从所选的所有选项开始。在我的实际应用中,过滤器中的更改可能需要相当长的时间才能运行,因此我submitButton
会阻止应用不断更新。唯一的问题是应用程序的初始启动:它将选择加载到动态UI并选择它们,但由于submitButton
阻止了进一步的反应,此信息无法到达情节,所以它显示了一个空的情节。获得所需结果所需的所有内容都会被sumbitButton
点击一次。完成此操作后,应用程序将按需运行。
我正在寻找一种方法来初步显示情节,而不必按submitButton
。在我的下面的玩具示例中,可以通过将submitButton
替换为actionButton
来轻松完成,这样就不会冻结所有反应性,这似乎是涉及{{1}的许多问题的解决方案。在另一个问题中。但是,在我的实际应用程序中有很多输入和反应来源,因此当submitButton
完成所有这些时,配置actionButton
并在observeEvent
中捕获所有所需的效果将非常繁琐。唯一的问题是创业。我有没有其他方法可以在第一次启动时制作情节,但是从那时起遵循submitButton
行为?
示例应用:
submitButton
答案 0 :(得分:1)
您可以使用reactive
检查输入是否为空(第一次),然后提供默认值:
Cylselection <- reactive({
if(is.null(input$Cylselection))
sort(unique(mtcars$cyl))
else
input$Cylselection})
output$Carsplot <- renderPlot({
plotdata <- subset(mtcars, cyl %in% Cylselection()) #Filter based on cyl
ggplot(plotdata, aes(x = mpg, y = hp, colour = factor(cyl))) + #Create plot
geom_point()
})
更优雅的是将您的数据子集置于被动反应中:
plotdata <- reactive({
if(is.null(input$Cylselection))
mtcars
else
subset(mtcars, cyl %in% input$Cylselection)})
output$Carsplot <- renderPlot({
ggplot(plotdata(), aes(x = mpg, y = hp, colour = factor(cyl))) + #Create plot
geom_point()
})