R Shiny:对不同的输出控件重复使用冗长的计算

时间:2015-08-09 18:16:25

标签: r shiny

我在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更改时调用它三次,并且在更新所有三个文本输出时只调用一次控制?

1 个答案:

答案 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将返回缓存值。

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

如果someLengthyComputation非常昂贵,您应该考虑添加action buttonsubmit button并仅在点击计算时触发计算,尤其是在您使用textInput时。 / p>