Shiny
Published:
This lesson is from datacamp Introduction to Shiny
# Template
library(shiny)
ui - fluidPage(
)
server = function(input, output, session){
}
shinyApp(ui = ui, server = server)
library(shiny)
ui = fluidPage(
"Hello World!"
)
server = function(input, output, session){
}
shinyApp(ui=ui, server=server)
library(shiny)
ui = fluidPage(
textInput("name", "Enter a name: ")
)
server = function(input,
output,
session){
}
options(shiny.host = '0.0.0.0')
options(shiny.port = 8000)
shinyApp(ui=ui, server=server)
library(shiny)
# Displays input and output
# Output is from server based on input
ui = fluidPage(
textInput("name", "Enter a name: "),
textOutput("text")
)
# server will paste name from input and additional content
# in the output text
server = function(input, output, session){
output$text = renderText({
paste("Do you prefer R or Tableau,", input$name, "?")
})
}
shinyApp(ui=ui, server=server)
# Greeting App
library(shiny)
library(dplyr)
library(ggplot2)
library("babynames")
ui = fluidPage(
textInput("name", "What is your name?"),
textOutput("greeting")
)
server = function(input, output){
output$greeting = renderText({
paste("Hello ", input$name)
})
}
options(shiny.host = "0.0.0.0")
options(shiny.port = 8000)
shinyApp(ui=ui, server=server)
library(shiny)
library(dplyr)
library(ggplot2)
library("babynames")
ui = fluidPage(
#titlePanel("Baby Name Explorer"),
textInput("name", "Enter Name ", "Name"),
plotOutput("trend")
)
server = function(input, output){
output$trend = renderPlot({
babynames %>%
filter(name == input$name) %>%
ggplot(aes(x=year, y=prop)) +
geom_line()
})
}
shinyApp(ui, server)
# Babynames Explorer
library("babynames") # install.packages("babynames")
library(shiny)
library(dplyr)
library(ggplot2)
library("babynames")
ui = fluidPage(
titlePanel("Baby Name Explorer"),
sidebarLayout(
sidebarPanel(
textInput("name", "Enter Name ", "Name")
),
mainPanel(plotOutput("trend"))
)
)
server = function(input, output){
output$trend = renderPlot({
babynames %>%
filter(name == input$name) %>%
ggplot(aes(x=year, y=prop)) +
geom_line()
})
}
shinyApp(ui, server)
Select Input
library(shiny)
library(dplyr)
library(ggplot2)
library("babynames")
ui = fluidPage(
titlePanel("Baby Name Explorer"),
sidebarLayout(
sidebarPanel(
selectInput("name",
"Enter name",
choices = c("David", "Emma", "Mary"))
),
mainPanel(plotOutput("trend"))
)
)
server = function(input, output){
output$trend = renderPlot({
babynames %>%
filter(name == input$name) %>%
ggplot(aes(x=year, y=prop)) +
geom_line()
})
}
shinyApp(ui, server)
Slider Input
ui = fluidPage(
titlePanel("Baby Name Explorer"),
sidebarLayout(
sidebarPanel(
selectInput("name",
"Enter name",
choices = c("David", "Emma", "Mary")),
sliderInput("year", "Select Year",
value = 1920,
min = 1900,
max = 2005)
),
mainPanel(plotOutput("trend"))
)
)
server = function(input, output){
output$trend = renderPlot({
babynames %>%
filter(name == input$name) %>%
filter(year > input$year) %>%
ggplot(aes(x=year, y=prop)) +
geom_line()
})
}
shinyApp(ui, server)
library(shiny)
ui = fluidPage(
textInput("name", "Enter a name:"),
selectInput("animal",
"Dogs or cats?",
choices = c("dogs", "cats")),
textOutput("greeting"),
textOutput("answer")
)
server = function(input, output, session){
output$greeting = renderText({
paste("Do you prefer dogs or cats,", input$name, "?")
})
output$answer = renderText({
paste("I prefer ", input$animal, "!")
})
}
shinyApp(ui=ui, server=server)
library(shiny)
library(dplyr)
library(ggplot2)
library("babynames")
ui = fluidPage(
titlePanel("What's in a name"),
selectInput("gender",
"Select Gender",
choices = c("F", "M")),
sliderInput("year",
"Select a year",
value = 1900,
min = 1900,
max = 2010),
plotOutput("plot_top_10_names")
)
server = function(input, output){
output$plot_top_10_names = renderPlot({
babynames %>%
filter(sex == input$gender) %>%
filter(year == input$year) %>%
top_n(10, prop) %>%
ggplot(aes(x=name, y=prop)) +
geom_col(fill="blue")
})
}
shinyApp(ui=ui, server=server)
- tableOutput() and renderTable()
- imageOutput() and renderImage()
- plotOutput() and renderPlot()
Table Output
# renderTable() and tableOutput() or dataTableOutput
# renderImage() and imageOutput()
# renderPlot() and plotOutput()
library(shiny)
library(ggplot2)
library(dplyr)
library("babynames")
ui = fluidPage(
titlePanel("What's in a Name?"),
selectInput('gender',
'Select Gender',
choices = c("F", "M")),
sliderInput('year',
'Select Year',
min = 1900,
max = 2010,
value = 1900),
tableOutput("table_top_10_names")
)
server = function(input, output, session){
output$table_top_10_names = renderTable({
top_10_names <- babynames %>%
filter(sex == input$gender) %>%
filter(year == input$year) %>%
top_n(10, prop)
})
}
shinyApp(ui = ui, server = server)
DT
# Using DT
library(shiny)
library(DT) # install.packages("DT")
library(ggplot2)
library(dplyr)
library("babynames")
ui = fluidPage(
titlePanel("What's in a name"),
selectInput("gender",
"Select Gender",
choices = c("F", "M")),
sliderInput("year",
"Select a year",
value = 1900,
min = 1900,
max = 2010),
DT::DTOutput("table_top_10_names")
)
server = function(input, output){
output$table_top_10_names = DT::renderDT({
babynames %>%
filter(sex == input$gender) %>%
filter(year == input$year) %>%
top_n(100, prop)
})
}
shinyApp(ui=ui, server=server)
# Using function inside a server
ui = fluidPage(
titlePanel("What's in a name"),
selectInput("gender",
"Select Gender",
choices = c("F", "M")),
sliderInput("year",
"Select a year",
value = 1900,
min = 1900,
max = 2010),
DT::DTOutput("table_top_10_names")
)
server = function(input, output){
temp = function(){
babynames %>%
filter(sex == input$gender) %>%
filter(year == input$year) %>%
top_n(100, prop)
}
output$table_top_10_names = DT::renderDT({
temp()
})
}
shinyApp(ui=ui, server=server)
Using function inside server
# Using function inside server
library(shiny)
library(ggplot2)
library(dplyr)
library("babynames")
ui <- fluidPage(
titlePanel("What's in a Name?"),
selectInput('gender',
'Select gender',
choices = c("M", "F")),
sliderInput('year',
'Select Year',
min = 1900,
max = 2010,
value = 1900),
DT::DTOutput('table_top_10_names')
)
server <- function(input, output, session){
temp = function(){
babynames %>%
filter(sex == input$gender) %>%
filter(year == input$year) %>%
top_n(10, prop)
}
output$table_top_10_names <- DT::renderDT({
temp()
})
}
shinyApp(ui = ui, server = server)
Using DT a fraction of table
# Using DT a fraction of table
library(shiny)
library(DT)
library(ggplot2)
library(dplyr)
library("babynames")
ui = fluidPage(
DT::DTOutput("babynames_table")
)
server = function(input, output){
output$babynames_table = DT::renderDT({
babynames %>%
dplyr::sample_frac(0.1)
})
}
shinyApp(ui = ui, server = server)
Interactive Plot Output
# Interactive Plot Output
library(shiny)
library(ggplot2)
library(dplyr)
library("babynames")
top_trendy_names = babynames %>%
filter(year==2017) %>%
group_by(name) %>%
summarise(total = sum(prop)) %>%
arrange(desc(total)) %>%
top_n(10, total)
ui <- fluidPage(
selectInput('name', 'Select Name', top_trendy_names$name),
# CODE BELOW: Add a plotly output named 'plot_trendy_names'
plotly::plotlyOutput('plot_trendy_names')
)
server <- function(input, output, session){
# Function to plot trends in a name
plot_trends <- function(){
babynames %>%
filter(name == input$name) %>%
ggplot(aes(x = year, y = n)) +
geom_col()
}
# CODE BELOW: Render a plotly output named 'plot_trendy_names'
output$plot_trendy_names <- plotly::renderPlotly({
plot_trends()
})
}
shinyApp(ui = ui, server = server)