shinyApp() construye e inicializa la aplicación: requiere UI y server como argumentos.
library(shiny)
library(datos)
library(dplyr)
library(ggplot2)
ui <- fluidPage(
title = "Pingüinos Palmer" ,
selectInput(inputId = "especie",
label = "Elegí la especie",
choices = unique(pinguinos$especie)),
verbatimTextOutput(outputId = "resumen"),
plotOutput(outputId = "grafico")
)
server <- function(input, output, session) {
dataset_filtrado <- reactive({
pinguinos |>
filter(especie == input$especie)
})
output$resumen <- renderPrint({
summary(dataset_filtrado())
})
output$grafico <- renderPlot({
dataset_filtrado() |>
ggplot(aes(x = largo_pico_mm,
y = masa_corporal_g)) +
geom_point()
})
}
shinyApp(ui = ui, server = server)
server <- function(input, output, session) {
dataset_filtrado <- reactive({
pinguinos |>
filter(especie == input$especie)
})
output$resumen <- renderPrint({
summary(dataset_filtrado())
})
output$grafico <- renderPlot({
dataset_filtrado() |>
ggplot(aes(x = largo_pico_mm,
y = masa_corporal_g)) +
geom_point()
})
}
Queremos diseñar una app que permita al usuario indicar un número entre 1 y 50 y que la app devuelva ese número multiplicado por 5.
¿Cuál es el error?
En la siguiente aplicación el usuario puede seleccionar un dataset y la aplicación muestra un resumen de los datos y un gráfico.
¿Cuáles son los tres errores?
library(shiny)
library(ggplot2)
datasets <- c("economics", "faithfuld", "seals")
ui <- fluidPage(
selectInput("dataset",
"Dataset",
choices = datasets),
verbatimTextOutput("summary"),
tableOutput("plot")
)
server <- function(input, output, session) {
dataset <- reactive({
get(input$dataset, "package:ggplot2")
})
output$summary <- renderPrint({
summary(dataset())
})
output$plot <- renderPlot({
plot(dataset)
}, res = 96)
}
shinyApp(ui, server)
library(shiny)
library(ggplot2)
datasets <- c("economics", "faithful", "seals")
ui <- fluidPage(
selectInput("dataset",
"Dataset",
choices = datasets),
verbatimTextOutput("summary"),
plotOutput("plot")
)
server <- function(input, output, session) {
dataset <- reactive({
get(input$dataset, "package:ggplot2")
})
output$summary <- renderPrint({
summary(dataset())
})
output$plot <- renderPlot({
plot(dataset())
}, res = 96)
}
shinyApp(ui, server)
Si tienes una lista moderadamente larga en un selectInput(), es útil crear subtítulos que dividan la lista en secciones. Lee la documentación para descubrir cómo hacerlo.
mamiferos <- c("perro", "delfín", "liebre", "rata", "vaca")
reptiles <- c("cocodrilo", "tortuga", "iguana")
anfibios <- c("ranas", "salamandra", "tritón")
ui <- fluidPage(
selectInput("animal",
"Cual es tu animal preferido?",
choices = list("mamiferos" = mamiferos,
"reptiles" = reptiles,
"anfibios" = anfibios)),
)
server <- function(input, output, session) {
}
shinyApp(ui, server)
# Creamos el data frame
df <- data.frame(animal = c("perro", "delfín", "liebre",
"rata", "vaca", "cocodrilo",
"tortuga", "iguana", "ranas",
"salamandra", "tritón"),
categoria = c(rep("mamifero", 5),
rep("reptil", 3),
rep("anfibio", 3)))
# Creamos la lista agrupada
animales_agrupados <- split(df$animal, df$categoria)
# En una aplicación Shiny, usarías el selectInput() así:
ui <- fluidPage(
selectInput("animal",
"Elige un animal:",
choices = animales_agrupados)
)
server <- function(input, output, session) {
}
shinyApp(ui, server)
¿Tenés dudas sobre la teoría? ¿Resolviste de otra forma las actividades? ¿Te trabaste en algún ejercicio?