Загрузка Reactive Dataframe / проблема с данными - PullRequest
0 голосов
/ 10 июля 2019

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

1 Ответ

0 голосов
/ 11 июля 2019

Я пробовал набор данных Iris ширины решения, который может дать вам возможность выбрать тип данных, который вы хотите сохранить, перед загрузкой данных в соответствии с выбранным параметром ...

library(shiny)
library(shinydashboard)
library(DT)
library(datasets)
library(xlsx)

ui <- dashboardPage(
  dashboardHeader(title = "Basic dashboard"),
  dashboardSidebar(),
  dashboardBody(
    # Boxes need to be put in a row (or column)
    fluidRow(
      box(
        DTOutput("dtable")
          )
    )
  )
)

server <- function(input, output) {
  myModal <- function() {
    div(id = "Download_DATA",
        modalDialog(downloadButton("download1","Download iris as CSV"),
                    br(),
                    br(),
                    downloadButton("download2","Download iris as XLSX"),
                    easyClose = TRUE, title = "Download Table")
    )
  }

  output$dtable <- renderDT(
    datatable(iris,
              extensions = 'Buttons',
              options = list(
                dom = 'Bfrtip',
                buttons = list(
                  list(
                    extend = "collection",
                    text = 'Download',
                    action = DT::JS("function ( e, dt, node, config ) {
                                    Shiny.setInputValue('Download_DATA', true, {priority: 'event'});
}")
                  )
                    )
                  )
                )
              )

  observeEvent(input$Download_DATA, {
    showModal(myModal())
  })


  output$download1 <- downloadHandler(
    filename = function() {
      paste("data-", Sys.Date(), ".csv", sep="")
    },
    content = function(file) {
      write.csv(iris, file)
    }
  )

  output$download2 <- downloadHandler(
    filename = function() {
      paste("data-", Sys.Date(), ".xlsx", sep="")
    },
    content = function(file) {
      write.xlsx(iris, file)
    }
  )

}

shinyApp(ui, server)

Пожалуйста, дайте мне знать ....

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...