【发布时间】:2015-12-12 23:39:31
【问题描述】:
我正在使用 Shiny 和 DT 包来显示来自 MySQL 数据库的过滤表。
简而言之,我从用户那里得到一个输入值,创建一个 SQL 查询,捕获输出并将其显示为一个 DataTable。可以使用 DataTable 列过滤器进一步过滤输出,用户应该能够下载过滤后的数据集。
根据DT docs,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代码,以便人们可以帮助您。
标签: r datatables shiny dt