'Error - Using R shiny app to produce a timeseries and three widgets in the side panel
I am pretty new to Rshiny and need help (please don't be too brutal, I am trying). I want to build a shiny app displaying a time series showing number of users from a specific country over a certain period. So a sidebar panel with 3 widgets:
- "Country" - factor list of 3 countries
- "User" - factor list of three types of users. Select box where they are able to choose between one or all three user types
- "Date" calendar allowing you to pick a date between 2020-06-01 - 2021-11-01
Then this will produce one output which is a ggplot line time series showing users from the chosen country. With the provided code I've only been able show the 3 widgets but the plot itself results the error:
Error in output$lineplot <- renderPlot({ : object 'output' not found
df
Country date Users Count
Angola 2020-06-01 New_users 4
Angola 2020-06-01 Returning_Users 0
Angola 2020-06-01 Active_Users 4
Angola 2020-08-01 New_users 5
Angola 2020-08-01 Returning_Users 2
Angola 2020-08-01 Active_Users 7
Angola 2020-10-01 New_users 1
Angola 2020-10-01 Returning_Users 0
Angola 2020-10-01 Active_Users 1
Angola 2020-11-01 New_users 2
Angola 2020-11-01 Returning_Users 5
Angola 2020-11-01 Active_Users 7
Angola 2020-12-01 New_users 0
Angola 2020-12-01 Returning_Users 6
Angola 2020-12-01 Active_Users 6
Angola 2021-01-01 New_users 6
Angola 2021-01-01 Returning_Users 7
Angola 2021-01-01 Active_Users 13
Angola 2021-02-01 New_users 4
Angola 2021-02-01 Returning_Users 4
Angola 2021-02-01 Active_Users 8
Angola 2021-03-01 New_users 5
Angola 2021-03-01 Returning_Users 3
Angola 2021-03-01 Active_Users 8
Angola 2021-06-01 New_users 1
Angola 2021-06-01 Returning_Users 0
Angola 2021-06-01 Active_Users 1
Angola 2021-07-01 New_users 1
Angola 2021-07-01 Returning_Users 2
Angola 2021-07-01 Active_Users 3
Angola 2021-10-01 New_users 15
Angola 2021-10-01 Returning_Users 14
Angola 2021-10-01 Active_Users 29
Angola 2021-11-01 New_users 44
Angola 2021-11-01 Returning_Users 37
Angola 2021-11-01 Active_Users 81
Kenya 2020-06-01 New_users 32
Kenya 2020-06-01 Returning_Users 0
Kenya 2020-06-01 Active_Users 32
Kenya 2020-08-01 New_users 26
Kenya 2020-08-01 Returning_Users 25
Kenya 2020-08-01 Active_Users 51
Kenya 2020-10-01 New_users 14
Kenya 2020-10-01 Returning_Users 20
Kenya 2020-10-01 Active_Users 34
Kenya 2020-11-01 New_users 9
Kenya 2020-11-01 Returning_Users 17
Kenya 2020-11-01 Active_Users 26
Kenya 2020-12-01 New_users 0
Kenya 2020-12-01 Returning_Users 11
Kenya 2020-12-01 Active_Users 11
Kenya 2021-01-01 New_users 17
Kenya 2021-01-01 Returning_Users 42
Kenya 2021-01-01 Active_Users 59
Kenya 2021-02-01 New_users 28
Kenya 2021-02-01 Returning_Users 37
Kenya 2021-02-01 Active_Users 65
Kenya 2021-03-01 New_users 27
Kenya 2021-03-01 Returning_Users 20
Kenya 2021-03-01 Active_Users 47
Kenya 2021-06-01 New_users 162
Kenya 2021-06-01 Returning_Users 41
Kenya 2021-06-01 Active_Users 203
Kenya 2021-07-01 New_users 187
Kenya 2021-07-01 Returning_Users 68
Kenya 2021-07-01 Active_Users 255
Kenya 2021-10-01 New_users 155
Kenya 2021-10-01 Returning_Users 64
Kenya 2021-10-01 Active_Users 219
Kenya 2021-11-01 New_users 33
Kenya 2021-11-01 Returning_Users 49
Kenya 2021-11-01 Active_Users 82
South Africa 2020-05-01 New_users 19
South Africa 2020-05-01 Returning_Users 0
South Africa 2020-05-01 Active_Users 19
South Africa 2020-06-01 New_users 40
South Africa 2020-06-01 Returning_Users 9
South Africa 2020-06-01 Active_Users 49
South Africa 2020-07-01 New_users 41
South Africa 2020-07-01 Returning_Users 13
South Africa 2020-07-01 Active_Users 54
South Africa 2020-08-01 New_users 64
South Africa 2020-08-01 Returning_Users 20
South Africa 2020-08-01 Active_Users 84
South Africa 2020-10-01 New_users 58
South Africa 2020-10-01 Returning_Users 13
South Africa 2020-10-01 Active_Users 71
South Africa 2020-12-01 New_users 105
South Africa 2020-12-01 Returning_Users 36
South Africa 2020-12-01 Active_Users 141
South Africa 2021-01-01 New_users 47
South Africa 2021-01-01 Returning_Users 37
South Africa 2021-01-01 Active_Users 84
South Africa 2021-02-01 New_users 213
South Africa 2021-02-01 Returning_Users 54
South Africa 2021-02-01 Active_Users 267
South Africa 2021-03-01 New_users 224
South Africa 2021-03-01 Returning_Users 66
South Africa 2021-03-01 Active_Users 290
South Africa 2021-06-01 New_users 122
South Africa 2021-06-01 Returning_Users 94
South Africa 2021-06-01 Active_Users 216
South Africa 2021-07-01 New_users 1428
South Africa 2021-07-01 Returning_Users 78
South Africa 2021-07-01 Active_Users 1506
South Africa 2021-10-01 New_users 457
South Africa 2021-10-01 Returning_Users 433
South Africa 2021-10-01 Active_Users 890
South Africa 2021-11-01 New_users 96
South Africa 2021-11-01 Returning_Users 200
South Africa 2021-11-01 Active_Users 296
Code
# Load packages -----------------------------------------------------
library(shiny)
library(shinythemes)
library(ggplot2)
library(dplyr)
library(readxl)
# Define UI ---------------------------------------------------------
ui <- fluidPage(titlePanel("Users"),
sidebarLayout(
sidebarPanel(
# Select type of trend to plot
selectInput(inputId = "type", label = strong("Trend index"),
choices = unique(df$Country),
selected = "Angola"),
checkboxGroupInput(inputId = "selected_user_type",
label = "Select user type",
choices =c ("Active_Users","New_users","Returning_User"),
selected = "New_users"),
# Select date range to be plotted
dateRangeInput("date", strong("Date range"),
start = "2020-06-01", end = "2021-11-01",
min = "2020-06-01", max = "2021-11-01"),
),
# Output: Description, lineplot, and reference
mainPanel(
plotOutput(outputId = "lineplot", height = "300px"),
textOutput(outputId = "desc"),
tags$a(href = "https://www.google.com/finance/domestic_trends", "Source: Google Domestic Trends", target = "_blank")
)
)
)
# Define server function --------------------------------------------
server <- function(input, output) {
# Subset data
users_subset <- reactive({
req(input$selected_user_type)
filter(df, Users %in% input$selected_user_type)
})
selected_trends <- reactive({
req(input$date)
validate(need(!is.na(input$date[1]) & !is.na(input$date[2]), "Error: Please provide both a start and an end date."))
validate(need(input$date[1] < input$date[2], "Error: Start date should be earlier than end date."))
df%>%
filter(
users_subset,
date > as.POSIXct(input$date[1]) & date < as.POSIXct(input$date[2]
))
})
# Create scatterplot object the plotOutput function is expecting
}
output$lineplot <- renderPlot({
ggplot(data = selected_trends, aes_string(x = selected_trends()$date, selected_trends()$Count)) +
geom_line(alpha = input$alpha) +
labs(x = "Time (Month)", y = "Users")
})
# Create the Shiny app object ---------------------------------------
shinyApp(ui = ui, server = server)
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|

