R 抑制submitButton对Shining app启动的影响
我有一个闪亮的应用程序,带有一个反应式的UI,用于过滤我的数据。然后我使用这些数据进行绘图。我的UI反应位检查变量的所有可能值,在R 抑制submitButton对Shining app启动的影响,r,shiny,R,Shiny,我有一个闪亮的应用程序,带有一个反应式的UI,用于过滤我的数据。然后我使用这些数据进行绘图。我的UI反应位检查变量的所有可能值,在selectizeInput中提供它们作为选项,并从所有选定的选项开始。在我的实际应用程序中,过滤器中的更改可能需要相当长的时间才能运行,因此我有submitButton,以防止应用程序不断更新。唯一的问题是在应用程序的初始启动时:它将选择加载到动态UI并选择它们,但由于进一步的反应被submitButton阻止,此信息无法到达绘图,因此显示为空绘图。只需点击一次su
selectizeInput
中提供它们作为选项,并从所有选定的选项开始。在我的实际应用程序中,过滤器中的更改可能需要相当长的时间才能运行,因此我有submitButton
,以防止应用程序不断更新。唯一的问题是在应用程序的初始启动时:它将选择加载到动态UI并选择它们,但由于进一步的反应被submitButton
阻止,此信息无法到达绘图,因此显示为空绘图。只需点击一次sumbit按钮
,即可获得所需结果。一旦完成此操作,应用程序将按需要工作
我正在寻找一种不必按下submitButton
即可使绘图最初显示的方法。在我下面的玩具示例中,用actionButton
替换submitButton
可能很容易做到这一点,因此并非所有的反应都被冻结,这似乎是其他问题中涉及submitButton
的许多问题的解决方案。然而,在我的实际应用程序中,有许多输入和反应源,因此配置action按钮
并在observeEvent
s中捕获所有期望的效果将是相当乏味的,因为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)
库(闪亮)
图书馆(GG2)
ui您可以使用反应式检查输入是否为空(第一次),然后提供默认值:
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()
})
Cylselection
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()
})