我在server.R中有以下代码:
library(shiny)
source("helpers.R")
shinyServer(function(input, output) {
output$txtOutput1 <- renderText({
someLengthyComputation(input$txtInput)[1]
})
output$txtOutput2 <- renderText({
someLengthyComputation(input$txtInput)[2]
})
output$txtOutput3 <- renderText({
someLengthyComputation(input$txtInput)[3]
})
})
helpers.R包含方法someLengthyComputation
,它返回一个大小为3的向量。如何每次txtInput
更改时调用它三次,并且在更新所有三个文本输出时只调用一次控制?
答案 0 :(得分:5)
您只需将someLengthyComputation
放在reactive
表达式中
shinyServer(function(input, output) {
someExpensiveValue <- reactive({
someLengthyComputation(input$txtInput)
})
output$txtOutput1 <- renderText({
someExpensiveValue()[1]
})
output$txtOutput2 <- renderText({
someExpensiveValue()[2]
})
output$txtOutput3 <- renderText({
someExpensiveValue()[3]
})
})
仅当someLengthyComputation
更改并且第一个输出呈现时,才会触发 input$txtInput
,否则someExpensiveValue
将返回缓存值。
虽然执行策略略有不同,但也可以使用reactiveValues
和observe
的组合。
如果someLengthyComputation
非常昂贵,您应该考虑添加action button或submit button并仅在点击计算时触发计算,尤其是在您使用textInput
时。 / p>