Я новичок в 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)
}