Сохранить ввод как числовое значение для создания трех таблиц в 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'. Надеюсь это поможет!

Другие вопросы по тегам