我想创建一个大表来在Shiny应用程序中的表之后创建一些表。
这是我server.R
的一部分:
function(input, output) {
output$year <- renderText(input$year)
################################
# CONFLICTING PART OF THE CODE
year <- reactive({
as.character(input$year)
})
matrix = tbl_df(dbReadTable(rca_matrices_db, reactive(paste0("table_",year))))
################################
my_table = matrix %>% ... BLA BLA BLA
output$more_than_10 <- DT::renderDataTable(DT::datatable({
mytable %>% select(X1,X2) %>% filter(X1 > 10)
}))
output$less_than_10 <- DT::renderDataTable(DT::datatable({
mytable %>% select(X1,X2) %>% filter(X1 < 10)
}))
}
)
而year
来自ui.R
sidebarPanel(
selectInput('year', 'Year', c("Select year",1999:2015), selected = 1999)
)
如果我在server.R
的冲突部分替换<{p}}的year
变量
year <- 2000
然后它起作用
任何想法?
答案 0 :(得分:1)
问题在于
matrix = tbl_df(dbReadTable(rca_matrices_db, reactive(paste0("table_",year))))
不是被动的。每当被动年份发生变化时,它都不会更新。另外,正如评论中已经指出的那样,要调用被动year
的值,您需要使用year()
。所以你需要让my_table成为一个反应,也许如下:
my_table <- reactive({
my_matrix = tbl_df(dbReadTable(rca_matrices_db, reactive(paste0("table_",year()))))
my_table = my_matrix %>% ... BLA BLA BLA
return (my_table)
})
现在,my_table()
的值将随时更新year()
更改,这些更改会随时更改input$year
更改。 (注意,你也可以在这里直接输入$ year而不是让year()
成为一个单独的被动者)。
所以你现在可以做到:
output$more_than_10 <- DT::renderDataTable(DT::datatable({
mytable() %>% select(X1,X2) %>% filter(X1 > 10)
}))
这将随时更新被动mytable()
更改,我们刚刚注意到这些更改为`input $ year&#39;变化。希望这有帮助!