私のアプリでは、ユーザーは 3 つの要素 (年、日付、測点) を入力し、クリックしactionButton
て温度プロットを取得します。ボタンがないとアプリは遅くなり、入力が変更されるたびに新しいプロットが作成されました。ボタンを追加しましたが、これを適切に行ったかどうかはわかりません。入力ごとにバラバラeventReactive
にしたのですが、まとめられないのでしょうか?いくつか試してみましたが、わかりませんでした。
この男の「読み込み中」と「完了」の GIF を実装しようとしているので、これが必要です (私のアプリは非常に遅いため、何かが起こっていることを人々に安心させる必要があります)。
https://github.com/daattali/advanced-shiny/tree/master/busy-indicator
しかし、個別のリアクティブ イベントでは、各ステップで gif が再表示されたり消えたりするため、actionButton
プロセス全体でそれらを維持する必要があります。
編集
T.Holme のおかげで挿入しisolate()
ました。しかし、gif を実装しようとする前に、2 番目の部分を調整する必要があり、そこで苦労しています。
EDIT 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)
})
})
私のアプリは、選択した種の人口動態を示す 2 番目のプロットを表示します。私の古いコードでは次のように機能しました: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
}
})