Я просто забираю 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)