He creado una guía completa y detallada para que tus estudiantes desarrollen Shiny Apps usando Positron, el nuevo IDE con IA integrada. La guía está diseñada desde cero, pensando en quienes solo conocen RMarkdown básico.


¿Qué incluye la guía?

Sección Contenido Tiempo estimado
Parte 1 Qué es Positron, diferencias con RStudio, el Modo Agente de IA 10 min
Parte 2 Instalación de Positron, configuración de R, extensiones recomendadas 15 min
Parte 3 Primera Shiny App en Positron, diferencias con Posit Cloud 20 min
Parte 4 Uso del Modo Agente de Copilot: crear apps, depurar errores, explicar código 20 min
Parte 5 Estructura profesional de proyectos, separar en ui.R/server.R/global.R 15 min
Parte 6 Publicar en shinyapps.io desde Positron (paso a paso) 15 min
Parte 7 Depuración profesional con breakpoints y watch 10 min
Parte 8 3 ejercicios prácticos progresivos 30 min
Parte 9 Control de versiones con Git integrado 10 min
Parte 10 Atajos de teclado imprescindibles 5 min
Anexo Solución de problemas comunes -

Guía Completa: Desarrollo de Shiny Apps en Positron

Para estudiantes de Estadística Aplicada y Diseño Experimental

Desde RMarkdown básico hasta Shiny Apps publicadas en shinyapps.io


Parte 1: ¿Qué es Positron y por qué usarlo? (10 minutos)

¿Qué es Positron?

Positron es el nuevo IDE (Entorno de Desarrollo Integrado) creado por Posit (antes RStudio). Es como RStudio, pero modernizado:

Característica RStudio / Posit Cloud Positron
Base Aplicación propietaria Basado en VS Code (Visual Studio Code)
Lenguajes Principalmente R R, Python, JavaScript, TypeScript, SQL
IA integrada Copilot como add-on Copilot/GitHub Copilot integrado nativamente
Modo Agente No disponible Disponible (IA que escribe y ejecuta código por ti)
Extensiones Addins de R Miles de extensiones del marketplace de VS Code
Terminal Terminal integrada Terminal más potente, múltiples sesiones
Velocidad Buena Más rápida, más ligera

¿Qué es el “Modo Agente” de IA?

Es una función revolucionaria donde la IA (como GitHub Copilot) no solo completa código, sino que: - Entiende tu proyecto completo - Escribe archivos completos por ti - Ejecuta comandos en terminal automáticamente - Depura errores sola - Crea estructuras de proyectos desde cero

Ejemplo:

Tú: "Crea una Shiny App que lea un CSV y muestre un histograma interactivo"
IA: Genera app.R, instala paquetes, crea la interfaz, y la ejecuta. Tú solo revisas.

¿Por qué usar Positron para enseñar?

  1. Es el futuro: Posit está migrando todo a Positron
  2. IA integrada: Los estudiantes aprenden más rápido con asistencia inteligente
  3. Multi-lenguaje: Pueden combinar R (Shiny) + Python en el mismo proyecto
  4. Gratuito: Totalmente gratis, multiplataforma (Windows, Mac, Linux)
  5. Más ligero: Consume menos recursos que RStudio

Parte 2: Instalación y configuración de Positron (15 minutos)

Paso 1: Descargar e instalar Positron

  1. Ve a: https://github.com/posit-dev/positron/releases
  2. Descarga la última versión estable para tu sistema operativo:
    • Windows: .exe
    • Mac: .dmg (Intel o Apple Silicon)
    • Linux: .deb o .rpm
  3. Instala como cualquier otra aplicación

Paso 2: Verificar que R está instalado

Positron necesita que R ya esté instalado en tu computador.

¿Cómo saber si tengo R? - Abre una terminal (CMD en Windows, Terminal en Mac/Linux) - Escribe: R --version - Si ves un número de versión, ¡está instalado!

Si NO tienes R instalado: 1. Ve a: https://cran.r-project.org/ 2. Descarga R para tu sistema operativo 3. Instálalo con las opciones por defecto

Paso 3: Configurar Positron para usar R

  1. Abre Positron
  2. Presiona Ctrl+Shift+P (o Cmd+Shift+P en Mac)
  3. Escribe: R: Create New R Terminal
  4. Selecciona la versión de R que quieres usar
  5. ¡Listo! Ya puedes ejecutar código R

Paso 4: Instalar extensiones recomendadas

Positron usa el marketplace de VS Code. Ve al icono de Extensiones (cuadrado de bloques a la izquierda) e instala:

Extensión Para qué sirve
R (de REditorSupport) Syntax highlighting, autocompletado, linting
R Debugger Depurar código R paso a paso
Rainbow CSV Visualizar archivos CSV con colores
GitHub Copilot IA que escribe código (requiere cuenta GitHub)
GitHub Copilot Chat Chat con IA sobre tu código
Radian (opcional) Terminal R más bonita y funcional

Parte 3: Tu primera Shiny App en Positron (20 minutos)

Crear un nuevo proyecto

  1. En Positron, haz clic en File → New Folder (o Ctrl+K Ctrl+O)
  2. Crea una carpeta llamada mi-primera-shiny
  3. Positron abre la carpeta como un Workspace

Crear el archivo app.R

  1. En el explorador de archivos (izquierda), haz clic derecho → New File
  2. Nómbralo: app.R (¡exactamente así, en minúsculas!)
  3. Pega el código mínimo:
library(shiny)

# ---- UI: Lo que se ve ----
ui <- fluidPage(
  titlePanel("Hola Mundo Shiny"),
  
  sidebarLayout(
    sidebarPanel(
      sliderInput("n", "Número de datos:", min = 10, max = 1000, value = 100)
    ),
    mainPanel(
      plotOutput("hist")
    )
  )
)

# ---- SERVER: La lógica ----
server <- function(input, output) {
  output$hist <- renderPlot({
    hist(rnorm(input$n), col = "steelblue", main = paste("Histograma con", input$n, "datos"))
  })
}

# ---- Ejecutar ----
shinyApp(ui = ui, server = server)

Ejecutar la app

Método 1: Desde la terminal de R

# En la consola de R dentro de Positron:
shiny::runApp("app.R")

Método 2: Con atajo de teclado 1. Abre el archivo app.R 2. Presiona Ctrl+Shift+Enter (ejecuta el archivo completo) 3. La app se abre en tu navegador o en una pestaña interna

Método 3: Botón Run (truco en Positron) 1. Abre app.R 2. Ve a la terminal 3. Escribe y ejecuta: source("app.R")

Diferencias clave con Posit Cloud

Acción Posit Cloud Positron (local)
Ejecutar app Botón “Run App” shiny::runApp() o source()
Instalar paquetes En consola del cloud En terminal local
Archivos En la nube En tu computador
Persistencia Se guarda automático Tú guardas con Ctrl+S
Publicar Botón “Publish” Comando deployApp()

Parte 4: Usar el Modo Agente de IA en Positron (20 minutos)

Esta es la función más poderosa de Positron. Te enseño cómo usarla para acelerar el desarrollo de Shiny Apps.

Activar GitHub Copilot

  1. Crea una cuenta gratuita en https://github.com
  2. Ve a Settings → Copilot y activa el plan gratuito (para estudiantes es gratis)
  3. En Positron, inicia sesión con GitHub:
    • Presiona Ctrl+Shift+P → “GitHub Copilot: Login”
    • Sigue las instrucciones

Usar Copilot Chat (el chat con IA)

Presiona Ctrl+Alt+I (o Cmd+Ctrl+I en Mac) para abrir el chat.

Ejemplo 1: Crear una app completa

Prompt que escribes:

Crea una Shiny App que:
1. Tenga un fileInput para subir archivos CSV
2. Muestre una tabla con DT::datatable
3. Tenga un selectInput para elegir la variable X y otra para Y
4. Genere un gráfico de dispersión con ggplot2
5. Use tema bonito con bslib::page_fluid

Lo que hace Copilot: - Genera el archivo app.R completo - Te sugiere instalar paquetes faltantes - Explica cada parte del código

Ejemplo 2: Depurar errores

Prompt:

Mi app.R da este error: "Error in ..object:not found 'input$mi_tabla'"
¿Qué puede estar mal?

Respuesta de Copilot:

El error indica que output$mi_tabla está intentando acceder a input$mi_tabla, pero este input no existe en tu UI. Verifica que:
1. El inputId coincida exactamente (distingue mayúsculas/minúsculas)
2. El input esté definido en la UI antes de usarlo en el server

Ejemplo 3: Explicar código a estudiantes

Prompt:

Explica qué hace esta función de una Shiny App paso a paso, como si yo fuera estudiante de primer semestre:

observeEvent(input$boton_analizar, {
  req(input$archivo)
  datos <- read.csv(input$archivo$datapath)
  output$tabla <- renderDT({ datatable(datos) })
})

Respuesta esperada:

1. observeEvent: "Observa" cuando el usuario presiona el botón
2. req(): Verifica que haya un archivo antes de continuar
3. read.csv(): Lee el archivo CSV subido
4. input$archivo$datapath: Obtiene la ubicación temporal del archivo
5. renderDT(): Crea una tabla interactiva que se muestra en la UI

Trucos avanzados del Modo Agente

Comando Qué hace
/fix Corrige el código seleccionado
/explain Explica el código seleccionado
/tests Genera pruebas automáticas
/doc Genera documentación
/new Crea un nuevo archivo

Parte 5: Estructura de proyecto profesional en Positron (15 minutos)

Organización recomendada

mi-shiny-app/
│
├── app.R                 # Archivo principal (puede dividirse)
├── ui.R                  # Interfaz de usuario (opcional, separado)
├── server.R              # Lógica del servidor (opcional, separado)
├── global.R              # Configuración global y carga de datos
│
├── data/                 # Datos del proyecto
│   └── datos_ejemplo.csv
│
├── R/                    # Funciones auxiliares
│   ├── utils.R           # Funciones de utilidad
│   └── calculos.R        # Funciones de cálculo
│
├── www/                  # Archivos estáticos (imágenes, CSS)
│   ├── logo.png
│   └── estilos.css
│
├── tests/                # Pruebas (avanzado)
│   └── test_app.R
│
├── renv/                 # Control de dependencias (avanzado)
│
└── README.md             # Documentación del proyecto

Dividir app.R en partes (patrón avanzado)

Cuando la app crece, separar en archivos mejora la organización:

ui.R:

ui <- fluidPage(
  titlePanel("Mi App"),
  sidebarLayout(
    sidebarPanel(
      fileInput("archivo", "Sube CSV"),
      selectInput("variable", "Variable:", choices = NULL)
    ),
    mainPanel(
      plotOutput("grafico"),
      DTOutput("tabla")
    )
  )
)

server.R:

server <- function(input, output, session) {
  
  datos <- reactive({
    req(input$archivo)
    read.csv(input$archivo$datapath)
  })
  
  observe({
    updateSelectInput(session, "variable", choices = names(datos()))
  })
  
  output$tabla <- renderDT({
    datatable(datos())
  })
  
  output$grafico <- renderPlot({
    req(input$variable)
    hist(datos()[[input$variable]], main = input$variable)
  })
}

global.R (carga al inicio):

library(shiny)
library(DT)
library(ggplot2)

# Funciones compartidas
formato_dinero <- function(x) {
  paste0("$", formatC(x, big.mark = ".", decimal.mark = ",", digits = 0))
}

En Positron, abres cualquiera de estos archivos y ejecutas shiny::runApp() desde la terminal.


Parte 6: Publicar en shinyapps.io desde Positron (15 minutos)

Paso 1: Instalar rsconnect

En la terminal de Positron (pestaña Terminal abajo):

install.packages("rsconnect")

Paso 2: Configurar tu cuenta

  1. Ve a https://www.shinyapps.io/ e inicia sesión
  2. Ve a Account → Tokens
  3. Copia el comando completo que aparece

Paso 3: Configurar en Positron

En la consola de R dentro de Positron, pega y ejecuta el comando copiado:

rsconnect::setAccountInfo(
  name='tu-usuario',
  token='TU_TOKEN_AQUI',
  secret='TU_SECRET_AQUI'
)

Paso 4: Publicar

Opción A: Comando en consola

library(rsconnect)
deployApp(
  appDir = ".",                          # Carpeta actual
  appName = "mi-app-shiny",              # Nombre en shinyapps.io
  appTitle = "Mi Primera Shiny App"
)

Opción B: Archivo de despliegue (recomendado para clase)

Crea un archivo deploy.R en tu proyecto:

# ============================================================================
# Script de despliegue a shinyapps.io
# ============================================================================

# 1. Verificar paquetes
paquetes <- c("shiny", "shinyjs", "bslib", "DT", "plotly", "ggplot2")
for (pkg in paquetes) {
  if (!requireNamespace(pkg, quietly = TRUE)) {
    install.packages(pkg)
  }
}

# 2. Cargar rsconnect
library(rsconnect)

# 3. Desplegar (reemplaza con tu nombre)
deployApp(
  appName = "evaluador-volantes",
  appTitle = "Evaluador de Volantes de Pago"
)

Para publicar: abre deploy.R y ejecuta con Ctrl+Shift+Enter.

Paso 5: Verificar la publicación

Si todo sale bien, verás:

Preparing to deploy application...DONE
Uploading bundle for application: 1234567...DONE
Deploying bundle: 9876543 for application: 1234567 ...
Application successfully deployed to https://tu-usuario.shinyapps.io/mi-app-shiny/

¡Haz clic en la URL y compártela!


Parte 7: Depuración con Positron (10 minutos)

Herramientas de depuración

Positron trae herramientas profesionales de depuración:

  1. Breakpoints (puntos de interrupción)
    • Haz clic en el margen izquierdo del código (aparece un punto rojo)
    • La ejecución se pausa ahí para que examines variables
  2. Watch (variables en observación)
    • Ve al panel Debug (izquierda)
    • Agrega variables para ver sus valores en tiempo real
  3. Console interactiva durante debugging
    • Cuando el código está pausado, puedes ejecutar comandos en consola

Depurar una Shiny App paso a paso

server <- function(input, output) {
  
  output$grafico <- renderPlot({
    # PON UN BREAKPOINT AQUÍ (clic en margen izquierdo)
    req(input$variable)  # Se pausa aquí
    
    datos <- mtcars
    # En consola puedes escribir: head(datos)
    # Y verás los primeros datos
    
    plot(datos[[input$variable]])
  })
}

Ver logs de la app

Cuando la app está corriendo, Positron muestra: - Consola de R: Errores de R - Terminal: Mensajes del sistema - Output: Mensajes de Shiny


Parte 8: Ejercicios prácticos con Positron (30 minutos)

Ejercicio 1: App con IA generada (10 min)

Usa Copilot Chat (Ctrl+Alt+I) y pide:

Crea una Shiny App minimalista que calcule el coeficiente de correlación entre dos variables seleccionadas del dataset mtcars.

Copilot generará el código. Tú solo: 1. Crea app.R 2. Pega el código 3. Ejecuta con shiny::runApp()

Ejercicio 2: App con upload de datos (10 min)

Crea desde cero:

library(shiny)
library(DT)
library(ggplot2)

ui <- fluidPage(
  titlePanel("Análisis Exploratorio Automático"),
  fileInput("file", "Sube un CSV"),
  selectInput("x", "Variable X:", choices = NULL),
  selectInput("y", "Variable Y:", choices = NULL),
  plotOutput("plot"),
  DTOutput("table")
)

server <- function(input, output, session) {
  data <- reactive({
    req(input$file)
    read.csv(input$file$datapath)
  })
  
  observe({
    vars <- names(data())
    updateSelectInput(session, "x", choices = vars, selected = vars[1])
    updateSelectInput(session, "y", choices = vars, selected = vars[2])
  })
  
  output$table <- renderDT({
    datatable(head(data(), 20))
  })
  
  output$plot <- renderPlot({
    req(input$x, input$y)
    ggplot(data(), aes_string(x = input$x, y = input$y)) +
      geom_point(color = "steelblue", size = 3) +
      theme_minimal()
  })
}

shinyApp(ui, server)

Ejercicio 3: Usar bslib para un tema moderno (10 min)

library(shiny)
library(bslib)
library(ggplot2)

ui <- page_fluid(
  theme = bs_theme(bootswatch = "minty"),  # Tema pastel
  
  title = "Dashboard de Ventas",
  
  card(
    card_header("Filtros"),
    layout_column_wrap(
      width = 1/3,
      selectInput("region", "Región:", choices = c("Norte", "Sur", "Este", "Oeste")),
      dateRangeInput("fechas", "Periodo:", start = "2024-01-01"),
      actionButton("filtrar", "Aplicar", class = "btn-primary")
    )
  ),
  
  card(
    card_header("Resultados"),
    plotOutput("grafico_ventas")
  )
)

server <- function(input, output) {
  output$grafico_ventas <- renderPlot({
    # Simulación de datos
    datos <- data.frame(
      mes = month.abb,
      ventas = sample(1000:5000, 12)
    )
    ggplot(datos, aes(x = mes, y = ventas)) +
      geom_col(fill = "steelblue") +
      coord_flip() +
      theme_minimal()
  })
}

shinyApp(ui, server)

Parte 9: Control de versiones con Git en Positron (10 minutos)

¿Por qué usar Git?

  • Guarda el historial de cambios
  • Permite trabajar en equipo
  • Facilita deshacer errores
  • Es requisito para publicar en shinyapps.io

Configurar Git en Positron

  1. Ve al icono de Source Control (rama de árbol a la izquierda)
  2. Si no hay repositorio, haz clic en Initialize Repository
  3. Positron crea un repositorio Git local

Flujo de trabajo básico

1. Haces cambios en app.R
2. Guardas con Ctrl+S
3. En Source Control, ves los archivos modificados
4. Escribes un mensaje: "Agregué gráfico de barras"
5. Clic en ✓ Commit
6. Clic en ... → Push (si tienes GitHub conectado)

Conectar con GitHub

  1. Ve a https://github.com y crea un repositorio nuevo
  2. En Positron, abre terminal (Ctrl+J)
  3. Sigue las instrucciones que GitHub te da:
git remote add origin https://github.com/tu-usuario/tu-repo.git
git branch -M main
git push -u origin main

Parte 10: Resumen de atajos de teclado en Positron (5 minutos)

Atajo Acción
Ctrl+Shift+P Paleta de comandos (todo)
Ctrl+J Mostrar/ocultar terminal
Ctrl+Shift+Enter Ejecutar archivo R completo
Ctrl+Enter Ejecutar línea seleccionada
Ctrl+Alt+I Abrir Copilot Chat
Ctrl+S Guardar archivo
Ctrl+Shift+T Nueva terminal
Ctrl+Shift+C Comentar/descomentar líneas
Ctrl+Shift+F Buscar en todo el proyecto
Ctrl+K Z Modo Zen (sin distracciones)
Ctrl+Shift+M Insertar chunk RMarkdown

Anexo: Solución de problemas comunes

“R no encontrado” en Positron

# Windows: Agregar R al PATH
# 1. Busca "Variables de entorno" en Windows
# 2. Edita "Path" del usuario
# 3. Agrega: C:\Program Files\R\R-4.x.x\bin\x64

# Mac/Linux: En terminal
export PATH="/usr/local/bin:$PATH"

“Package not found” al publicar en shinyapps.io

# Positron usa renv o packrat para detectar dependencias
# Asegúrate de cargar todos los paquetes en app.R:
library(shiny)
library(DT)       # Si usas tablas
library(ggplot2)    # Si usas gráficos
library(bslib)      # Si usas temas

La app se ve diferente en shinyapps.io

Algunos temas de bslib necesitan versión específica:

# En app.R, al inicio:
options(bslib.version = 5)

Copilot no responde

  1. Verifica que iniciaste sesión: Ctrl+Shift+P → “Copilot: Sign In”
  2. Verifica que tienes internet
  3. Cierra y abre Positron

Conclusión: Tu roadmap de aprendizaje

Semana 1: Shiny básico en Positron
  ├── Día 1: Instalar Positron, crear app.R mínima
  ├── Día 2: Inputs y outputs
  ├── Día 3: Reactividad básica
  └── Día 4: Publicar primera app en shinyapps.io

Semana 2: Shiny intermedio
  ├── Día 1: fileInput y tablas con DT
  ├── Día 2: Gráficos interactivos con plotly
  ├── Día 3: Tabs y layout con bslib
  └── Día 4: Modo Agente de Copilot

Semana 3: Shiny avanzado (proyecto final)
  ├── Día 1: Diseño del proyecto
  ├── Día 2: Desarrollo con IA asistida
  ├── Día 3: Pruebas y depuración
  └── Día 4: Publicación y documentación

Recursos adicionales

Recurso Enlace
Positron GitHub (descargas) https://github.com/posit-dev/positron
Documentación Positron https://positron.posit.co/
Shiny oficial https://shiny.posit.co/
bslib (temas) https://rstudio.github.io/bslib/
shinyapps.io https://www.shinyapps.io/
GitHub Student Pack https://education.github.com/

Con esta guía, tus estudiantes deberían ser capaces de: 1. Instalar y configurar Positron 2. Crear Shiny Apps desde cero 3. Usar IA asistida (Copilot) para acelerar el desarrollo 4. Publicar aplicaciones en shinyapps.io 5. Depurar errores como profesionales

¡Éxitos con Positron! Es una herramienta increíble que les abrirá muchas puertas en el mundo del análisis de datos.