私はrenderUIウィジェット内のいくつかの入力を呼び出すときに反応式が複数回評価される状況に遭遇しました。R反応的な表現の光沢のある反復的評価
次の簡単なコードを確認してください。あなたのコンソールを見ている場合
library(shiny)
server <- function(input, output) {
output$INPUT_1 = renderUI({
selectInput("input_1","Input 1",choices = letters)
})
output$INPUT_2 = renderUI({
selectInput("input_2","Input 2",choices = letters)
})
output$INPUT_3 = renderUI({
selectInput("input_3","Input 3",choices = letters)
})
output$INPUT_4 = renderUI({
selectInput("input_4","Input 4",choices = letters)
})
output$text = renderText({
print("1")
paste(input$input_1,input$input_2,input$input_3,input$input_4)
})
}
ui <- fluidPage(
uiOutput("INPUT_1"),
uiOutput("INPUT_2"),
uiOutput("INPUT_3"),
uiOutput("INPUT_4"),
textOutput("text")
)
shinyApp(ui = ui, server = server)
、あなたは "1" が2回来た
Listening on http://127.0.0.1:4939
[1] "1"
[1] "1"
が表示されます。
自分のアプリは「1」が3回以上出ています。私の反応が大きいデータを扱うので、この種のシナリオはユーザーと私自身を本当に困惑させます。
これは、renderUI機能と関係があります。しかし、私はまだそれを修正する方法を見つけることができません。私はupdateXXXXX機能の使用を検討しましたが、入力UIには非常に複雑な計算が含まれています。ですから、updateXXXXXを使用することは私が避けようとしていることです。
私の反応式は一度しか評価できないのですか?
反応式は、(リンクされた)ui要素が変更されるたびに評価されます。したがって、アプリケーションが読み込まれ、すべての入力が空のときにサーバーが評価されます。反応的なUI要素が入力され、印刷が2度目に評価されるよりも、 (例えば、出力$ textにif(length(input $ input_1)> 0)print( "1")を追加します) – Arcoutte