抑制效果submitButton启动闪亮的应用程序
问题描述:
我有一个闪亮的应用程序与反应位的用户界面,用于过滤我的数据。然后我使用这些数据进行绘图。我的UI反应位检查变量的所有可能值,并将它们作为selectizeInput
中的选项提供,并从所选的所有选项开始。在我的实际应用程序中,过滤器的更改可能需要相当多的时间才能运行,因此我使用submitButton
来防止应用程序不断更新。唯一的问题是应用程序的初始启动:它将选择加载到动态用户界面并选择它们,但由于进一步的反应性被submitButton
阻止,所以此信息未达到图,因此它显示空图。只需要一次就可以获得所需结果。一旦完成这个应用程序按需运作。抑制效果submitButton启动闪亮的应用程序
我正在寻找一种方法来让剧情最初显示,而不必按submitButton
。在我的后续玩具例子中,这可以通过用actionButton
代替submitButton
来很容易地完成,以便并非所有的反应都被冻结,这似乎是在其他问题中涉及到很多涉及submitButton
的问题的解决方案。然而,在我的实际应用程序中有许多输入和反应性来源,所以配置actionButton
并在observeEvent
中捕获所有需要的效果时,submitButton
完成所有这些工作时唯一的问题就是启动时,将会非常繁琐。有没有其他的方法可以使剧情在第一次启动时显示,但是从那时起遵循submitButton
的行为?
一个示例应用程序:
library(shiny)
library(ggplot2)
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
uiOutput("Cylselectui"),
submitButton("Apply changes")
),
mainPanel(
plotOutput("Carsplot")
)
)
)
server <- function(input, output) {
output$Carsplot <- renderPlot({
plotdata <- subset(mtcars, cyl %in% input$Cylselection) #Filter based on cyl
ggplot(plotdata, aes(x = mpg, y = hp, colour = factor(cyl))) + #Create plot
geom_point()
})
output$Cylselectui <- renderUI({ #Create the cyl selectize ui based on the values of cyl that are in the data
selectizeInput(
'Cylselection', 'Select by Cylinder',
choices = sort(unique(mtcars$cyl)),
selected = sort(unique(mtcars$cyl)),
multiple = TRUE
)
})
}
shinyApp(ui = ui, server = server)
答
可以使用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()
})