Introdução ao Shiny

Simulações web interativas com R

Prof. Dr. Deoclecio Jardim Amorim — CENA/USP

25/11/2025

Introdução

O que é Shiny?

  • Framework em R para criar aplicações web interativas.
  • Permite construir dashboards, protótipos e interfaces gráficas sem usar HTML/CSS/JS.
  • Ideal para:
    • Visualização dinâmica
    • Análise exploratória
    • Ensino
    • Apresentação de resultados

Como o Shiny Funciona?

  • O app roda um servidor R que responde a mudanças do usuário.
  • Quando um input muda:
    1. O Shiny detecta a alteração
    2. Recalcula expressões dependentes
    3. Atualiza o output automaticamente
  • Esse sistema é chamado de reatividade.

Estrutura Básica de um App

Todo app contém:

install.packages("shiny")
library(shiny)

ui <- fluidPage(
  "Olá, esse é o primeiro aplicativo da disciplina cen0440!"
)

server <- function(input, output, session) {
}
shinyApp(ui, server)
  1. UI (interface do usuário)
  2. Server (lógica e reatividade)
  3. shinyApp(ui, server) para rodar

UI — Interface

Responsável por:

  • Layout visual
  • Inputs (ações do usuário)
  • Outputs (resultados exibidos)
ui <- fluidPage(
  titlePanel("Meu Primeiro App"),
  sidebarLayout(
    sidebarPanel(
      numericInput("num", "Escolha um número", value = 10)
    ),
    mainPanel(
      textOutput("resultado")
    )
  )
)

Server — Lógica

Responsável por:

  • Manipular inputs
  • Calcular valores
  • Produzir outputs
server <- function(input, output, session) {
  output$resultado <- renderText({
    paste("Você escolheu:", input$num)
  })
}

Rodando o App

shinyApp(ui, server)

Ao rodar, o Shiny:

  • Cria uma página web
  • Conecta inputs ↔︎ cálculos ↔︎ outputs
  • Atualiza tudo automaticamente quando necessário

Inputs — Elementos de Entrada

Exemplos comuns

  • numericInput() – números
  • textInput() – textos
  • sliderInput() – intervalos
  • selectInput() – escolha única ou múltipla
  • checkboxGroupInput() – múltiplas seleções

Exemplo:

sliderInput("idade", "Idade:", 0, 100, 25)

Outputs — Elementos de Saída

Tipos mais usados

  • textOutput() – texto
  • verbatimTextOutput() – console formatado
  • plotOutput() – gráficos
  • tableOutput() – tabelas
  • dataTableOutput() – tabelas interativas

Exemplo:

output$intro <- renderText({
  paste("Olá", input$nome, "!")
})

Reatividade

Expressões reativas

  • Recalculam automaticamente quando inputs mudam
  • São usadas como variáveis inteligentes
valor_dobrado <- reactive({
  input$num * 2
})

Observers

  • Executam ações sem retornar valores
  • Usados para logs e outras ações paralelas
observe({
  print(input$num)
})

eventReactive

  • Executado somente após um evento (ex: clique)
resultado <- eventReactive(input$botao, {
  input$num + 5
})

Layouts

Opções de layout

  • fluidPage()
  • sidebarLayout()
  • tabsetPanel()
  • navbarPage()
  • bslib::card() e layout_sidebar() (moderno)

Exemplo — Abas

tabsetPanel(
  tabPanel("Gráfico", plotOutput("graf")),
  tabPanel("Tabela", tableOutput("tab"))
)

Rodando os exemplos internos

Note que cada exemplo explora ferramentas diferentes!

runExample("01_hello")      # a histogram
runExample("02_text")       # tables and data frames
runExample("03_reactivity") # a reactive expression
runExample("04_mpg")        # global variables
runExample("05_sliders")    # slider bars
runExample("06_tabsets")    # tabbed panels
runExample("07_widgets")    # help text and submit buttons
runExample("08_html")       # Shiny app built from HTML
runExample("09_upload")     # file upload wizard
runExample("10_download")   # file download wizard
runExample("11_timer")      # an automated timer

Publicação

shinyapps.io

  • Deploy fácil com rsconnect::deployApp()
  • Plano gratuito:
    • 5 aplicações
    • 25 horas de uso/mês

Publicação — Outras Opções

GitHub

  • Repositório de código
  • Não executa apps Shiny

Posit Connect

  • Plataforma profissional
  • Suporte a APIs, Shiny, Quarto

Boas Práticas

  • Use reactive() para cálculos reutilizáveis
  • Evite duplicação de código
  • Use módulos em apps grandes
  • Separe UI e server em arquivos distintos
  • Documente seu código

Como melhorar um aplicativo?

Como melhorar um aplicativo?

Existem vários pacotes que permitem personalizar o seu aplicativo, permitindo, entre outras coisas, mudar tema e cores, inserir caixas informativas e botões com diferentes estilos. Alguns são:

  • shinythemes
  • shinydashboard
  • shinyWidgets
  • shinyjs

Referências

  • https://shiny.rstudio.com
  • https://mastering-shiny.org
  • https://rstudio.github.io/bslib