似乎还有其他一些人对同样的问题感到困惑,但在阅读并尝试我在这里找到的解决方案后,我仍然感到困惑。救命!
我有一个 Shiny 的应用程序,它获取两个日期之间的价格差异,并返回一个包含 4 个表的列表,每个表对应每个日期的每种产品类型,以及两个日期的价格增量的相同 4 个表。 (日期 1、日期 2、德尔塔)
在 Calc 之后的输出屏幕上,表保持为空,直到用户单击提示表刷新的输入选择器。
我仍在努力理解如何让表格在计算结束时自动刷新。
以下是我的 Server.R 文件中有关数据表之一的输出的逻辑:
dataset_HL <- reactive({
switch(input$dataset_HL,
"Deltas" = DELTA$HL,
"Date 1" = DATE1$HL,
"Date 2" = DATE2$HL)
})
termGroup_HL <- reactive({
switch(input$termGroup_HL,
"ALL" = rowIndex$ALL,
"BOM" = rowIndex$BOM,
"QTR" = rowIndex$QTR,
"CAL" = rowIndex$CAL)
})
values_HL <- reactive({
data <- dataset_HL()
colnames(data) <- locations$HL
data <- cbind(Terms = rownames(data), data)
rows <- termGroup_HL()
return(data[rows, ])
})
output$table_HL <- renderDataTable({
datatable(values_HL(),
rownames = FALSE,
options = list(
pageLength = 25,
lengthMenu = c(10, 25, 50, 100)
))
})
提前谢谢您。
最佳答案
我终于找到了答案,当然,Joe Cheng已经在这里回答了,Shiny Reactivity 。
只需在我的 react 函数内添加对操作按钮 input$GET_Dates 的调用即可触发表格的重新计算。
我还简化了我的 react 值函数。
values_HL <- reactive({
input$GET_Dates
dataset <- switch(input$dataset_HL,
"Deltas" = DELTA$HL,
"Date 1" = DATE1$HL,
"Date 2" = DATE2$HL)
termGroup <- switch(input$termGroup_HL,
"ALL" = rowIndex$ALL,
"BOM" = rowIndex$BOM,
"QTR" = rowIndex$QTR,
"CAL" = rowIndex$CAL)
data <- dataset[termGroup, ]
data <- cbind(Terms = rownames(data), data)
data
})
output$table_HL <- renderDataTable({
datatable(values_HL(),
rownames = FALSE,
options = list(
pageLength = 25,
lengthMenu = c(10, 25, 50, 100)
))
})
关于Shiny 中的reactiveValues 和全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29570168/