在我的应用程序中,用户输入 3 个元素(年、日期、站),单击actionButton
并获取温度图。没有按钮,应用程序很慢,每次输入更改都会生成一个新图。所以我添加了按钮,但我不确定我是否正确执行此操作。我将所有输入分开eventReactive
,但我不能把它们放在一起吗?我尝试了几件事,但无法弄清楚。
我需要这个,因为我正在尝试实现这个人的“加载”和“完成” gif(我的应用程序太慢了,人们需要放心一些事情正在发生):
https://github.com/daattali/advanced-shiny/tree/master/busy-indicator
但是随着单独的反应事件,gifs 会随着每一步重新出现和消失,并且它们必须在整个actionButton
过程中保持不变。
编辑
感谢我插入的 T.Holme isolate()
。但在我尝试实现 gif 之前,我必须调整第二部分,我在那里苦苦挣扎。
编辑 2
我刚刚了解到,为了避免renderPlot
在应用程序启动时运行内部的所有内容,您可以使用req(input$button)
而不是
if(input$button == 0){return(NULL)}
input$button
该if
解决方案呈现了一个空的白色矩形(绘图将出现的位置),而使用req()
,在您单击之前没有任何反应/出现。认为这也可能对其他人有所帮助。
我更正的代码:
ui <- fluidPage(
selectInput("jaartal" , choices = 2014:2100, selected = format(Sys.Date(), "%Y")),
uiOutput("datums")
selectInput("weerstation", choices = list("ALDENEIK", "ALKEN")),
actionButton("button", label = "Bereken"),
plotOutput("plotTemp")
)
server <- function(input, output){
# datum range
output$datums <- renderUI({
dateRangeInput("datums", label = h4("Periode"),
start = paste(input$jaartal, "-01-01", sep = ""),
end = paste(input$jaartal, format(Sys.Date(), "%m"),
format(Sys.Date(), "%d"), sep = "-"),
min = paste(input$jaartal, "-01-01", sep = ""),
max = paste(input$jaartal, "-12-31", sep = ""))
})
# plot temperatuur
output$plotTemp <- renderPlot({
req(input$button)
isolate({
importdata(input$jaartal)
weerstation <- which(weerstations == input$weerstation)
temperatuur(input$datums, weerstation)
})
})
我的应用程序显示了第二个图,其中包含所选物种的种群动态。它与我的旧代码一样工作:1)开始时没有情节。2) 通过单击按钮,制作温度和人口图。3)选择另一个物种,情节立即调整,无需按钮。4)当其他输入(日期、电台)发生变化时,用户必须单击按钮来调整两个图。
目前要求 1)、2) 和 3) 已满足,但 4) 未满足。当我改变车站时,情节不动=好,但是当我改变年份或日期时,人口情节调整=不好。有任何想法吗?
output$plotSoort <- renderPlot({
req(input$button)
isolate({
importdata(input$jaartal)
weerstation <- which(weerstations == input$weerstation)
temperatuur(input$datums, weerstation)})
if(input$populatie == "PER"){
perenbladvlo(input$datums, weerstation) # 1st species model
}
else if(input$populatie == "OOR"){
oorworm(input$datums, weerstation) # 2nd species model
}
else if(input$populatie == "FLU"){
fluweelmijt(input$datums, weerstation) # 3rd species model
}
})