我正在创建一个应用程序,其中使用了机器学习算法,而后者需要大量的计算能力。我想使用函数bindCache来提取计算结果。但是,当我的输入以不同的方式排序,但结果保持不变时,我的算法会重新计算所有内容,这是我不希望的。下面是一个简单的示例来说明我的问题:
library(shiny)
shinyApp(
ui = fluidPage(
selectInput("x", "x", seq(10), multiple = TRUE)
, br()
, br()
, br()
, br()
, br()
, br()
, br()
, br()
, br()
, br()
, verbatimTextOutput("txt")
),
server = function(input, output){
r <- reactive({
message("Doing expensive computation...")
Sys.sleep(2)
sort(as.numeric(input$x))
}) %>% bindCache(input$x)
output$txt <- renderText(r())
}
)
例如,如果输入2,然后输入5,则输入为c(2,5),总和为7。如果再次输入2,然后输入5,则结果将被保存。但是,如果再次输入5,然后输入2,则结果将再次重新计算,以获得相同的结果。如果值列表包含相同的值但没有排序,如何避免重新计算?
2条答案
按热度按时间vaqhlq811#
我相信这是可行的:
vtwuwzda2#
您可以尝试
memoise
而不是bindCache
: