我创建了一个Shiny应用程序,该应用程序从数据库中提取数据。我在UI部分有很多输入,在Server部分有很多输出。
在服务器部分,我有一个 react 函数,该函数使用一些输入来构建查询,然后从数据库中提取数据,例如:
queriedData <- reactive({
query <- paste0(...,input$a,...);
return(db$find(query))
})
在输出插槽中,我引用了使用中的数据
x <- queriedData()
我的问题是:
最佳答案
要回答您的问题:
queriedData
(它是一个 react 性表达式)将无效,并因此在每次从input$a
收到无效标志时进行更新。由于数据库查询是该计算的一部分,因此您的假设是正确的。 input$a
不变,因此queriedData
没有失效时,它仅返回缓存的数据。但是,当input$a
确实发生更改时,会重新计算queriedData
,因此将产生查询。 queriedData
的重新计算。 请记住,响应式(Reactive)表达式不一定需要作为输入。请看以下示例:
query <- reactive({paste0(...,input$a,...)})
queriedData <- reactive({
db$find(query())
})
output$thedata <- renderDataTable(queriedData())
现在,更改
input$a
将使query
无效,从而触发其重新计算。响应式表达式query
将使queriedData()
无效,从而触发其重新计算。这将使output$thedata
无效,并因此也导致对该部分进行重新计算,从而在数据表中显示新数据。关于r - 了解Shiny中的 react 函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39691240/