Сохранить ввод как числовое значение для создания трех таблиц в Shiny
Я хочу создать большую таблицу, чтобы создать несколько таблиц после этой таблицы в приложении 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
, year
переменная для
year <- 2000
тогда это работает
есть идеи?
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'. Надеюсь это поможет!