shiny - Rhsiny:根据更新的 rhandsontable 对象自动更新输出对象
问题描述
我有一个带有两张桌子的应用程序。一个表是一个可渲染的对象,另一个只是一个可渲染的对象。我希望当我更新我的 renderhandsontable 对象时,它会自动更新我的 rendertable 对象。我的 renderhandontable 对象是由应用程序中其他地方的数据使用多个过滤器创建的。
我在这里引用了几个非常有用的帖子,以帮助我在创建可用于多个输出对象的反应表方面取得进展,例如
如何在不多次执行的情况下从同一个分析中渲染多个输出?(闪亮的)
但我似乎无法越过这最后一道障碍。我还尝试添加一个按钮(使用eventReactive),所以当我按下它而不是自动更新表格时,表格会更新,但那里没有运气(并且自动肯定是首选)。
我在下面创建了一个过于简化的服务器代码版本。
#dummy data
x = c('A','A','A', 'B','B', 'c')
y = c('G1', 'G1', 'G1', 'G2', 'G2','G3')
z = c('100', '200', '300', '400','500','600')
b=data.frame('Category' = x,
'Group' = y,
'Total' = z)
#create reactive object to be used in multiple places
test <- reactive({
t <-filter(b, b$Category %in% input$cat & b$Group %in% input$group)
return(t)
})
output$test_table <- renderTable({
tbl = data.frame(matrix(0, ncol = 4, nrow = 4))
#I know something needs to be done prior to this step to get updated values #of test()
tbl[1,1] <- test()[1,3]
return(tbl)
})
output$contents <- renderRHandsontable({
rhandsontable(test())
})
我可以让我的表格正确显示并且最初更新数据,但是一旦我对我的表格进行了更新,它就不会反映在我的第二个表格中。
我已经为此苦苦挣扎了很长一段时间,所以任何帮助或提示将不胜感激!
解决方案
请阅读此。您可以通过访问 rhandsontable参数input$my_id
。要获取当前数据,请使用 input$my_id$params$data。
这就是我认为你所追求的:
library(shiny)
library(rhandsontable)
ui <- fluidPage(rHandsontableOutput("contents"),
tableOutput("test_table"),
tableOutput("test_table_subset"))
server <- function(input, output) {
# dummy data
x = c('A', 'A', 'A', 'B', 'B', 'C')
y = c('G1', 'G1', 'G1', 'G2', 'G2', 'G3')
z = c('100', '200', '300', '400', '500', '600')
b = data.frame('Category' = x,
'Group' = y,
'Total' = z)
# create reactive object to be used in multiple places
test <- reactive({
t <- b # dplyr::filter(b, b$Category %in% input$cat & b$Group %in% input$group)
return(t)
})
output$contents <- renderRHandsontable({
rhandsontable(test())
})
contentsTableDat <- reactive({
req(input$contents)
hot_to_r(input$contents)
})
output$test_table <- renderTable({
contentsTableDat()
})
output$test_table_subset <- renderTable({
contentsTableDat()[1, 3]
})
}
shinyApp(ui = ui, server = server)