我在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
更改时调用它三次,而在更新所有三个文本输出控件时仅调用一次? 最佳答案
您可以简单地将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
时。