A continuación se deja una guía detallada desde cero absoluto para que se pueda crear una cuenta, construir una App Shiny básica en Posit Cloud y desplegarla en shinyapps.io.
Al finalizar esta actividad, el estudiante deberá ser capaz de:
rsconnect.Antes de iniciar, es importante distinguir dos plataformas:
| Plataforma | Función principal |
|---|---|
| Posit Cloud | Lugar donde se escribe y ejecuta el código R/Shiny en la nube. |
| shinyapps.io | Servicio donde se publica la App para que otras personas la abran desde un enlace web. |
Es decir:
Posit Cloud → desarrollar la App
shinyapps.io → publicar y compartir la App
Posit documenta que las aplicaciones Shiny pueden publicarse desde
RStudio usando el botón Publish o mediante el paquete
rsconnect con la función deployApp(). (Posit Docs)
El estudiante debe ingresar a:
https://posit.cloud/
Luego debe:
Posit Cloud permite usar herramientas de ciencia de datos directamente desde el navegador, sin necesidad de instalar RStudio en el computador. (Posit Cloud)
El estudiante debe ingresar a:
https://www.shinyapps.io/
Luego debe:
Al entrar, el estudiante verá un panel parecido a este:
Dashboard
Applications
Account
Billing
Usage
Tokens
Dentro de Posit Cloud:
Cuando el proyecto abra, se observarán cuatro zonas principales:
| Zona | Función |
|---|---|
| Editor | Lugar donde se escribe el código. |
| Console | Lugar donde se ejecutan comandos R. |
| Environment | Muestra objetos creados en memoria. |
| Files / Plots / Packages | Archivos, gráficos y paquetes del proyecto. |
app.REn Posit Cloud:
app.R
Es importante que el archivo se llame exactamente:
app.R
Shiny reconoce este archivo como la aplicación principal.
Copie y pegue este código en app.R:
# ============================================================
# Mi primera aplicación Shiny
# Curso: Estadística Aplicada / Programación con R
# Archivo principal: app.R
# ============================================================
# Cargar el paquete principal de Shiny
library(shiny)
# ------------------------------------------------------------
# INTERFAZ DE USUARIO
# ------------------------------------------------------------
# Aquí se define lo que el usuario verá en la página web.
# Incluye títulos, controles de entrada y espacios para salidas.
ui <- fluidPage(
# Título principal de la aplicación
titlePanel("Mi primera App Shiny"),
# Diseño con panel lateral y panel principal
sidebarLayout(
# Panel lateral: recibe entradas del usuario
sidebarPanel(
# Control numérico para que el usuario escriba su nombre
textInput(
inputId = "nombre",
label = "Escriba su nombre:",
value = ""
),
# Control deslizante para elegir un número
sliderInput(
inputId = "numero",
label = "Seleccione un número:",
min = 1,
max = 100,
value = 50
)
),
# Panel principal: muestra resultados
mainPanel(
# Salida de texto para el saludo
h3("Resultado:"),
textOutput("saludo"),
br(),
# Salida de texto para mostrar el número seleccionado
textOutput("numero_elegido")
)
)
)
# ------------------------------------------------------------
# SERVIDOR
# ------------------------------------------------------------
# Aquí se define la lógica de la aplicación.
# El servidor toma las entradas del usuario y produce salidas.
server <- function(input, output) {
# Generar un saludo personalizado
output$saludo <- renderText({
# Si el estudiante no escribe nombre, se muestra un mensaje general
if (input$nombre == "") {
"Bienvenido a esta App Shiny."
} else {
paste("Bienvenido,", input$nombre, ".")
}
})
# Mostrar el número seleccionado por el usuario
output$numero_elegido <- renderText({
paste("El número seleccionado es:", input$numero)
})
}
# ------------------------------------------------------------
# EJECUTAR LA APLICACIÓN
# ------------------------------------------------------------
# Esta línea une la interfaz y el servidor.
shinyApp(ui = ui, server = server)
En Posit Cloud, con el archivo app.R abierto:
También puede ejecutarse desde la consola con:
shiny::runApp()
La documentación de shinyapps.io recomienda verificar primero que la aplicación funciona localmente antes de desplegarla. (Posit Docs)
Para una App básica, el proyecto debe tener al menos este archivo:
/cloud/project/
└── app.R
Para Apps más avanzadas puede tener:
/cloud/project/
├── app.R
├── datos/
│ └── archivo.csv
├── www/
│ └── logo.png
└── README.md
No se debe colocar install.packages() dentro de
app.R.
Incorrecto:
install.packages("shiny")
library(shiny)
Correcto:
library(shiny)
Posit advierte que no se deben incluir llamadas explícitas a
install.packages() dentro de ui.R o
server.R. En el despliegue, rsconnect detecta
los paquetes mediante llamadas explícitas a library() y
envía esa información a shinyapps.io. (Posit Docs)
En la consola, ejecutar:
install.packages("shiny")
install.packages("rsconnect")
O de forma compacta:
install.packages(c("shiny", "rsconnect"))
Luego cargar:
library(shiny)
library(rsconnect)
En shinyapps.io:
El código tendrá una forma parecida a esta:
rsconnect::setAccountInfo(
name = "nombre-de-la-cuenta",
token = "TOKEN_GENERADO",
secret = "SECRET_GENERADO"
)
Cada estudiante debe copiar su propio código. No debe compartir
públicamente su token ni su secret.
En la consola de Posit Cloud, el estudiante debe pegar el código que le entrega shinyapps.io.
Ejemplo ilustrativo:
rsconnect::setAccountInfo(
name = "mi-cuenta",
token = "xxxxxxxxxxxxxxxx",
secret = "yyyyyyyyyyyyyyyy"
)
Después debe verificar que la cuenta quedó registrada:
rsconnect::accounts()
Debe aparecer algo parecido a:
name server
1 mi-cuenta shinyapps.io
deployApp()Desde la consola de Posit Cloud, estando en el proyecto donde está
app.R, ejecutar:
rsconnect::deployApp(
appDir = "/cloud/project",
appName = "mi-primera-app-shiny"
)
El nombre de la aplicación debe escribirse:
Ejemplos válidos:
mi-primera-app-shiny
app-probabilidad
analisis-datos-suelos
evaluador-estadistico
Ejemplos no recomendados:
Mi Primera App
Aplicación de Estadística
app con ñ
La documentación oficial indica que una App puede publicarse desde R
con el paquete rsconnect usando deployApp().
(Posit Docs)
Cuando el despliegue termina correctamente, shinyapps.io genera una URL parecida a:
https://nombre-cuenta.shinyapps.io/nombre-app/
Ejemplo:
https://miusuario.shinyapps.io/mi-primera-app-shiny/
Ese enlace puede compartirse por:
El estudiante debe probar el enlace en:
Si la App abre sin pedir usuario ni contraseña, el enlace está listo para compartir.
En shinyapps.io, la App puede aparecer con distintos estados:
| Estado | Significado |
|---|---|
| Running | La App está activa. |
| Sleeping | La App está dormida por inactividad. |
| Archived | La App está archivada y no se sirve normalmente. |
Que una App aparezca como Sleeping no es un error.
En general, cuando alguien abre el enlace, la App despierta y pasa
nuevamente a Running. Posit explica que las
aplicaciones pueden estar en estados como running,
sleeping o archived dentro de la
administración de aplicaciones. (Posit Docs)
api.shinyapps.io Not RegisteredPosit Cloud no tiene registrada la cuenta de shinyapps.io.
Ejecutar nuevamente en la consola el código del token:
rsconnect::setAccountInfo(
name = "nombre-cuenta",
token = "token",
secret = "secret"
)
Luego verificar:
rsconnect::accounts()
Unable to connect to worker after 60.00 secondsLa aplicación tarda demasiado en arrancar.
Puede ocurrir por:
install.packages() dentro de
app.R.No usar esto dentro de app.R:
install.packages("shiny")
Usar solo:
library(shiny)
there is no package called...El paquete no fue detectado correctamente o no aparece en
library().
Asegurarse de que el paquete esté cargado explícitamente:
library(shiny)
library(DT)
library(dplyr)
Luego volver a publicar:
rsconnect::deployApp(
appDir = "/cloud/project",
appName = "mi-primera-app-shiny",
forceUpdate = TRUE
)
| Problema | Solución |
|---|---|
| Archivo local no subido | Guardar los datos dentro del proyecto. |
| Ruta incorrecta | Usar rutas relativas, no rutas del computador personal. |
| Paquete faltante | Incluir library(paquete). |
Uso de install.packages() en app.R |
Quitar esa línea. |
| Archivo con tildes o espacios | Renombrar archivos de forma simple. |
Ejemplo de ruta recomendada:
datos <- read.csv("datos/archivo.csv")
Ejemplo de ruta no recomendada:
datos <- read.csv("C:/Users/Estudiante/Documents/archivo.csv")
app.REl archivo debe tener una estructura clara:
# Cargar paquetes
library(shiny)
# Interfaz
ui <- fluidPage(
...
)
# Servidor
server <- function(input, output) {
...
}
# Ejecutar App
shinyApp(ui = ui, server = server)
Usar nombres simples:
app.R
datos.csv
logo.png
resultados.xlsx
Evitar:
Aplicación Final Versión Última.R
datos con espacios y tildes.csv
archivo ñ.csv
Antes de publicar:
install.packages() de app.R.deployApp().Cada estudiante o grupo debe entregar:
Enlace de la App publicada en shinyapps.io.
Captura de pantalla de la App funcionando.
Captura de pantalla del panel de shinyapps.io donde aparece la App.
Archivo app.R.
Breve explicación de:
El estudiante puede entregar un documento con esta estructura:
# Despliegue de mi primera App Shiny
## 1. Datos del estudiante
Nombre:
Programa:
Asignatura:
Fecha:
## 2. Nombre de la App
Nombre de la aplicación:
## 3. Enlace publicado
URL:
## 4. Descripción de la App
La aplicación permite...
## 5. Entradas de la App
La App recibe...
## 6. Procesamiento
La App procesa...
## 7. Salidas
La App muestra...
## 8. Evidencias
Captura de Posit Cloud:
Captura de shinyapps.io:
Captura de la App publicada:
## 9. Dificultades encontradas
Durante el proceso se presentaron las siguientes dificultades...
## 10. Reflexión final
Esta actividad me permitió comprender que...
| Criterio | Descripción | Puntaje |
|---|---|---|
| Creación de cuentas | Se evidencia inscripción en Posit Cloud y shinyapps.io | 1.0 |
| Funcionamiento local | La App corre correctamente en Posit Cloud | 1.0 |
| Código organizado | El archivo app.R tiene estructura clara y
comentarios |
1.0 |
| Despliegue exitoso | La App abre correctamente desde shinyapps.io | 1.0 |
| Explicación del proceso | El estudiante describe entradas, procesos y salidas | 1.0 |
| Total | 5.0 |
Este código puede usarse como base para la primera práctica:
# ============================================================
# Mi primera App Shiny
# Autor: Nombre del estudiante
# Curso: Estadística Aplicada con R y Python
# ============================================================
library(shiny)
ui <- fluidPage(
titlePanel("Mi primera App Shiny"),
sidebarLayout(
sidebarPanel(
textInput(
inputId = "nombre",
label = "Nombre del estudiante:",
value = ""
),
numericInput(
inputId = "edad",
label = "Edad:",
value = 18,
min = 1
),
selectInput(
inputId = "programa",
label = "Programa académico:",
choices = c(
"Ingeniería Agrícola",
"Ingeniería Agroindustrial",
"Ingeniería Civil",
"Otro"
)
)
),
mainPanel(
h3("Resumen ingresado"),
verbatimTextOutput("resumen")
)
)
)
server <- function(input, output) {
output$resumen <- renderText({
paste(
"Nombre:", input$nombre,
"\nEdad:", input$edad,
"\nPrograma:", input$programa
)
})
}
shinyApp(ui = ui, server = server)
Después de probar que la App funciona, publicar con:
rsconnect::deployApp(
appDir = "/cloud/project",
appName = "mi-primera-app-shiny"
)
Si ya existe una versión anterior y se desea actualizar:
rsconnect::deployApp(
appDir = "/cloud/project",
appName = "mi-primera-app-shiny",
forceUpdate = TRUE
)
La secuencia completa es:
Crear cuenta en Posit Cloud
↓
Crear proyecto nuevo
↓
Crear archivo app.R
↓
Probar con Run App
↓
Crear cuenta en shinyapps.io
↓
Copiar token
↓
Ejecutar rsconnect::setAccountInfo()
↓
Ejecutar rsconnect::deployApp()
↓
Copiar enlace público
↓
Probar en incógnito
↓
Compartir la App
Esta actividad permite que los estudiantes no solo escriban código en R, sino que comprendan el ciclo completo de desarrollo de una aplicación web: diseño, programación, prueba, despliegue y socialización del producto final.