Я использую Shiny и пакет DT для отображения отфильтрованных таблиц из базы данных MySQL.
Короче говоря, я получаю входное значение от пользователя, создаю SQL-запрос, фиксирую результат и отображаю его как DataTable. Вывод может быть дополнительно отфильтрован с помощью фильтров столбца DataTable, и пользователь должен иметь возможность загрузить отфильтрованный набор данных.
Согласно документам DT, input$table_rows_all
должен содержать индексы строк отображаемой таблицы. Однако, когда я нажимаю кнопку загрузки, я получаю файл только с именами столбцов и без данных.
library(shiny)
library(DT)
library(RMySQL)
con <- dbConnect(MySQL(), user="myuser", host="myhost", dbname="mydb")
shinyServer(function(input, output) {
sqlOutput <- reactive({
sqlInput <- paste0("select * from mydb.mytable",
" where value < ", input$value,
";")
dbGetQuery(con, sqlInput)
})
output$table <- DT::renderDataTable(sqlOutput(), server=TRUE, rownames=FALSE, filter="top", options=list(pageLength=10))
output$download <- downloadHandler("filtered.data.txt", content = function(file) {
rows <- input$table_rows_all
write.table(sqlOutput()[rows, ], file, sep="\t", quote=FALSE, col.names=TRUE, row.names=FALSE)
})
})
В приведенном выше коде я сохраняю вывод DBI::dbQuery()
в реактивную функцию sqlOutput()
, чтобы затем передать его как DT::renderDataTable()
, так и shiny::downloadHandler()
.
Что я делаю неправильно? Я не уверен, но похоже, что input$table_rows_all
по какой-то причине возвращает пустой вектор.
Любая помощь очень ценится, спасибо!
downloadHandler
выглядит нормально. Вашinput$table_rows_all
, возвращающий пустой вектор, вероятно, является проблемой. Вам, вероятно, следует отредактировать свой вопрос и указать свойui.R
код, чтобы люди могли вам помочь. - person user5029763   schedule 17.09.2015