Если вы хотите, чтобы пользовательский интерфейс обновлялся только при нажатии кнопки, то likelihood
не нужно реагировать. Таким образом, вы можете написать свою функцию сервера как
server = function(input, output) {
observeEvent(input$button, {
likelihood<-(1/500)*input$popDensity
output$calculation<-renderUI({
if (likelihood>1) {
a <- paste("<span style=color:red> be careful! </span>")
}
else if (likelihood>.65){
a <- paste("<span style=color:orange> be careful! </span>")
}
else if (likelihood>.35){
a <- paste("<span style=color:yellow> be careful! </span>")
}
else if (likelihood>.10){
a <- paste("<span style=color:blue> be careful! </span>")
}
else {
a <- paste("<span style=color:green> be careful! </span>")
}
HTML(a)
})
})
}
и получить желаемый эффект.
В качестве альтернативы, если likelihood
должен оставаться реактивным по причинам, которые вы не объяснили, тогда вы необходимо изолировать его от его зависимости от ползунка и ввести зависимость от кнопки в вызов renderUI
. И то, и другое легко сделать.
Вы можете изолировать виджет от зависимости от ввода, используя isolate
:
likelihood<-reactive({(1/500)*isolate(input$popDensity)})
Ввести зависимость от кнопки так же просто: просто добавьте ссылка на input$button
в любом месте вызова renderUI
. Часто это делается в начале вызова:
output$calculation<-renderUI({
input$button
<your existing code here>
})