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"두 번왔다
Listening on http://127.0.0.1:4939
[1] "1"
[1] "1"
를 볼 수 있습니다.
내 응용 프로그램에 "1"이 3 번 이상 올 수 있습니다. 내 반응이 큰 데이터를 다룰 때마다 이런 종류의 시나리오는 내 사용자와 나 자신을 당혹스럽게 만듭니다.
저는 이것이 renderUI 기능과 관련이 있다고 확신합니다. 그러나 나는 그것을 고칠 수있는 방법을 찾을 수 없다. updateXXXXX 기능 사용을 고려했지만 입력 UI에는 매우 복잡한 계산이 포함되어 있습니다. 그래서 updateXXXXX를 사용하는 것은 피하려고 노력하고 있습니다.
내 반응식은 한 번만 평가할 수 있습니까?
반응식은 (연결된) 요소가 변경 될 때마다 평가됩니다. 그래서 서버는 앱이로드되고 모든 입력이 비어있을 때 평가됩니다. 반응적인 UI 요소가 채워지고 인쇄물이 다시 평가됩니다. (예를 들어 출력 $ text에 if (length (input $ input_1)> 0) print ("1")을 추가하십시오. – Arcoutte