我有一个闪亮的应用程序,其中selectInputs的更改触发对其他选择的更新和触发绘图更新。遗憾的是,在某些情况下,更改选择会导致绘图重新绘制,然后更新另一个选择并且绘图第二次绘制。所以我最终得到了多次重绘图。我的闪亮应用程序比下面的应用程序更复杂,但我已经提炼了这个问题。
每当用户更改国家/地区,年份或标题时,我都希望更改图表。但是当用户更改国家/地区时,它也会自动更新年份,这可能会导致更新与国家/地区相关联的地块,然后重新绘制与年份相关的数据。
是否有办法允许短暂的延迟,或许是为了闪亮的“赶上"并没有两个被动反应触发情节?或许还有其他选择?
library(shiny)
server <- function(input, output, session) {
output$plot <- renderPlot({
Sys.sleep(0.2)
plot(1:10, main=input$title)
rect(par("usr")[1], par("usr")[3], par("usr")[2], par("usr")[4], col = sample(colors() ,1))
})
observeEvent(input$country, {
vals <- switch(input$country,
US = 2001:2003,
UK = 2001:2005,
FR = 2002:2006)
updateSelectInput(session, "year", choices = vals, selected = vals[1])
})
observeEvent(c(input$country, input$year), {
updateNumericInput(session, "title",
value = paste(input$country, input$year))
})
}
ui <- fluidPage(
tags$div(class="panel-body",
selectInput("country", "country", choices = c("US", "UK", "FR"), selected = "US"),
textInput("title", "Give a title", "This is my initital title"),
selectInput("year", "year", choices = NULL, selected = NULL)
),
plotOutput("plot")
)
shinyApp(ui = ui, server = server)
答案 0 :(得分:1)
从我在这个具体案例中看到的情况来看,改变&#34;标题&#34;就足够了。观察者:
value
因为输入$ country的每次更改都会触发更新输入$ year,从&#34;标题&#34;删除输入$ country;观察者应避免双重绘图。我已经在本地进行了测试,但它确实有效。
请告诉我,这是一个很难解决的问题......
!!!注意 答案中有一个错误。如果国家改变但年份没有改变,它就不起作用。我重写了代码:
observeEvent(input$year, {
updateNumericInput(session, "title",
value = paste(input$country, input$year))
})