Как динамически импортировать данные и графики в соответствии с dateRangeInput в RShiny - PullRequest
0 голосов
/ 25 марта 2020

Я пытаюсь создать блестящее приложение, которое сначала импортирует мои данные и строит графики соответственно с помощью Dynami c dateRangeInput на основе данных, которые я импортирую.

Вы можете видеть, что приведенный ниже код работает, но я жестко закодировал свои данные (df в части server filter). Как сделать эту часть динамической c, что означает, что я могу импортировать любые данные, чтобы мне не пришлось их жестко кодировать? Я попытался изменить df деталь на input$file, но я получаю сообщение об ошибке: Error: Not compatible with requested type: [type=closure; target=double].

df <- data.frame("date" = c("2020-01-01", "2020-01-01", "2020-01-02", "2020-01-02"), "id" = c("A", "A", "B", "B"), "number" = c(1, 3, 2, 5))
write.csv(df, "df.csv", row.names = F)

df <- read.csv("df.csv")
df$date = as.Date(df$date)

#
library(shiny)
library(dplyr)
library(ggplot2)

if (interactive()) {
  ui <- fluidPage(
    tabsetPanel(
      tabPanel("Import Data",
               fileInput("file", "Upload Your File:"),
               DT::dataTableOutput("data")),

      tabPanel("Plot",
               dateRangeInput("daterange", strong("Select Your Date Range"),
                              start = min(df$date), end = max(df$date),
                              min = min(df$date), max = max(df$date)),               
               plotOutput("graph"))

    )
  )

  server <- function(input, output) {
    newdata <- reactive({
      req(input$file)
      df %>% filter(between(date, input$daterange[1], input$daterange[2]))
    })

    output$graph <- renderPlot({
      g <- ggplot(newdata(), aes(x = id, y = number)) +
        geom_boxplot() +
        theme_classic()
      print(g)
    })

    output$data <- DT::renderDataTable({
      req(input$file)

      inFile <- input$file

      if (is.null(inFile))
        return(NULL)
      read.csv(inFile$datapath)
    })
  }

  shinyApp(ui = ui, server = server)
}
...