Я пытаюсь создать блестящее приложение, которое сначала импортирует мои данные и строит графики соответственно с помощью 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)
}