【发布时间】:2017-04-10 02:40:11
【问题描述】:
在我的应用程序中,用户输入 3 个元素(年、日期、站),单击 actionButton 并获取温度图。
没有按钮,应用程序很慢,每次输入更改都会生成一个新图。所以我添加了按钮,但我不确定我是否正确执行此操作。我为所有输入单独制作了eventReactive,但我不能把它们放在一起吗?我尝试了一些东西,但无法弄清楚。
我需要这个,因为我正在尝试实现这个家伙的“加载”和“完成” gif(我的应用程序太慢了,人们需要放心一些事情正在发生):
https://github.com/daattali/advanced-shiny/tree/master/busy-indicator
但是对于单独的反应事件,gif 会随着每个步骤重新出现和消失,并且它们必须在整个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
}
})
【问题讨论】:
标签: r shiny action-button