Блестящая проблема сохранения данных CSV с использованием реактивного выражения для использования в нескольких выходах - PullRequest
0 голосов
/ 14 апреля 2020

Я просто забираю Shiny, и у меня запущено приложение с CSV, считываемым в массив в renderPlot. Тем не менее, я хочу использовать одни и те же данные несколько раз, поэтому было бы неэффективно читать CSV несколько раз во множество различных графиков и таблиц. Я следовал другим примерам здесь, пытаясь это сделать, но не могу заставить его работать - я уверен, что делаю основную ошибку c, которая будет сразу же очевидна. Я знаю, что остальная часть кода грязная, но я могу это улучшить.

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


library(readr)
library(dplyr)
library(shiny)
library(tidyverse)
library(lubridate)
library(ggplot2)


    ui <- fluidPage(
        sidebarLayout(
            sidebarPanel(
                fileInput("file1", "Choose CSV File",
                          accept = c(
                              "text/csv",
                              "text/comma-separated-values,text/plain",
                              ".csv")
                ),
                tags$hr(),
                dateRangeInput("daterange1", "Date range to display:",
                               start = "2020-03-15",
                               end   = "2020-04-10"),
            ),


            mainPanel(
                plotOutput("distPlot")

            )
        )
    )

    server <- function(input, output) {

        consults <- eventReactive(input$file1, {
            read.csv(inFile$datapath, skip=6)
        })

        output$distPlot <- renderPlot({

            #inFile <- input$file1
            #if (is.null(inFile))
            #    return(NULL)
            #consults <- read.csv(inFile$datapath, skip=6)

            #Fix the header names - replace spaces and brackets with dots
            names(consults)<-make.names(names(consults),unique = TRUE)

            #filter to providers - this is a cheap and cheerful way of getting the data in shape. Really want to collapse across each room ID without doubling up
            consults_providers = filter(consults, Participant.Type=="provider")

            #select out a date col
            consults_dates <- select(consults_providers,'Time.Call.Ended..local.')

            #I struggled with header titles with spaces in, so temporarily renaming til I work out the syntax.
            names(consults_dates)[1] <- "TimeEnded"
            #need to pass a single column to make this function work
            consults_dates_formatted <- parse_date_time(consults_dates$TimeEnded, "dmy HMS")
            final_dates <- date(consults_dates_formatted)
            freq_by_date <- table(final_dates)
            freq_by_date <- data.frame(freq_by_date)
            all_date <- data.frame(final_dates)

            g <- ggplot(all_date, aes(x=final_dates)) + 
                geom_bar(fill="blue") +
                #scale_x_date(limits = as.Date(c('2020-04-01','2020-04-07')))
                scale_x_date(limits = c(input$daterange1[1]-1, input$daterange1[2]+1)) +
                xlab("Date") +
                ylab("Number of consultations") +
                labs(title = "Consultations per day")

            g



        })


    }  

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