【发布时间】:2019-11-20 09:45:09
【问题描述】:
我是 R 新手,但我的任务是创建一个有效的下载按钮,该按钮会将查询表中的数据下载到 .csv 文件。目前,我无法理解应该传递给 write.csv() 函数的内容。我知道我必须使查询表具有反应性,但我也不确定如何做到这一点。我当前的代码遇到的错误是“ 不能将类'c("datatables", "htmlwidget")'强制转换为data.frame"
我尝试将我的 df() 函数作为参数传递,但它不起作用。
#ui
column(3,
conditionalPanel("input.table.period != '1980'",
# only prompt for rcp if a future period (not historical)
# input: select rcp
selectInput("table.rcp", "Emissions Scenario:",
c("Medium" = "45",
"High" = "85")),
downloadButton('downloadData', 'Download')
)
#server
server <- function(input, output) {
currentdf <- reactive({
# build query based on user-selections
if (input$table.stype == "ann") {
col.name <- columns.annual[grep(input$table.var, columns.annual)]
if (input$table.period == "1980") {
query <- paste0("SELECT ", col.name, ", subbasin, gcm_id FROM hydro_ann WHERE (period = ", input$table.period,
")")
} else {
query <- paste0("SELECT ", col.name, ", subbasin, gcm_id FROM hydro_ann WHERE (period = ", input$table.period,
") AND (rcp = ", input$table.rcp, ")")
}
} else {
col.name <- columns.month[grep(input$table.var, columns.month)]
if (input$table.period == "1980") {
query <- paste0("SELECT ", col.name, ", subbasin, gcm_id, calendar_month FROM hydro_month WHERE (period = ", input$table.period,
")")
} else {
query <- paste0("SELECT ", col.name, ", subbasin, gcm_id, calendar_month FROM hydro_month WHERE (period = ", input$table.period,
") AND (rcp = ", input$table.rcp, ")")
}
}
df <- dbGetQuery(db, query)
DT::df
})
output$querytable <- renderTable({ DT::datatable(currentdf()) })
output$downloadData <- downloadHandler(
filename = function() {
paste("QueriedData", "csv", sep = ".")
},
content = function(file) {
write.csv(as.data.frame(currentdf()),file)
}
【问题讨论】:
标签: r shiny download handler reactive