在一个闪亮的应用程序中,假设我的数据非常大,以至于我只想执行一次操作。
server.R
脚本可能如下所示:
shinyServer(function(input, output, session) {
data <- matrix(some_x, nrow=1000, ncol=5000)
calculation <- observe({
data <<- some_transformation(data, input$coefficient)
})
output$plot1 <- renderPlot({
plot(some_other_transformation(data))
})
output$plot2 <- renderPlot({
plot(some_other_transformation(data))
})
output$plot3 <- renderPlot({
invisible(input$coefficient)
plot(some_other_transformation(data))
})
})
为什么plot3
的反应式表达式是唯一评估的表达式? input
变量的存在是否“诱导”对此表达式的评估?
我的主要问题是:如何在不提及input
变量的情况下“诱导”表达情节1和2?
答案 0 :(得分:0)
如果您正在执行计算,那么观察者就是错误的工作工具,请参阅here。如果您只想执行一次计算,那么您应该有一个操作按钮。如果您希望每次更改输入时都执行操作,那么您应该使用被动:
shinyServer(function(input, output, session) {
data <- matrix(some_x, nrow=1000, ncol=5000)
trans_data <- reactive({
some_transformation(data, input$coefficient)
})
output$plot1 <- renderPlot({
plot(some_other_transformation(trans_data()))
})
output$plot2 <- renderPlot({
plot(some_other_transformation(trans_data()))
})
output$plot3 <- renderPlot({
invisible(input$coefficient)
plot(some_other_transformation(trans_data()))
})
})
被动反应只运行一次,见this:
反应式表达式比常规R函数更聪明一些。他们缓存他们的价值观并知道他们的价值何时变得过时。这是什么意思?第一次运行反应式表达式时,表达式会将其结果保存在计算机的内存中。下次调用反应式表达式时,它可以返回此保存的结果而不进行任何计算(这将使您的应用程序更快)。