someLengthyComputation

someLengthyComputation

我在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将返回缓存的值。

尽管执行策略略有不同,但也可以使用reactiveValuesobserve的组合。

如果someLengthyComputation确实很昂贵,则应考虑添加action buttonsubmit button并仅在单击时触发计算,特别是在使用textInput时。

09-03 18:36