Ambos lenguajes pueden ser utilizados para la creación de programas informáticos debido a que pueden integrar otro tipo de lenguajes como son html, JavaScript y CSS. Para poder hacerlos hacemos uso de Frameworks:
Ejemplo de una app
A continuación os presentamos un pequeño ejemplo de una app realizada con shiny. Se trata de la escala de Braden:
#| '!! shinylive warning !!': |
#| shinylive does not work in self-contained HTML documents.
#| Please set `embed-resources: false` in your metadata.
#| standalone: true
#| viewerHeight: 1000
library(shiny); library(shinyWidgets); library(bslib); library(dplyr)
ui <- fluidPage(theme = bs_theme(preset = "shiny"),
br(),
h3("Escala de Braden"),
hr(),
wellPanel(radioGroupButtons(
inputId = "Sensorial",
label = "Percepción sensorial",
choices = c("Completamente limitada", "Muy limitada", "Ligeramente limitada","Sin limitaciones"),
direction = "horizontal",
justified = T
),
radioGroupButtons(inputId = "Humedad",
label = "Exposición a al humedad",
choices = c("Constantemente húmeda", "Húmeda con frecuencia", "Ocasionalmente húmeda","Raramente húmeda"),
direction = "horizontal",
justified = T
),radioGroupButtons(inputId = "Actividad",
label = "Actividad",
choices = c("Encamado", "En silla", "Deambula ocasionalmente","Deambula frecuentemente"),
direction = "horizontal",
justified = T
),
radioGroupButtons(inputId = "Movilidad",
label = "Movilidad",
choices = c("Completamente inmovil", "Muy limitada", "Ligeramente limitada","Sin limitaciones"),
direction = "horizontal",
justified = T
),
radioGroupButtons(inputId = "Nutricion",
label = "Nutrición",
choices = c("Muy pobre", "Probablemente inadecuada", "Adecuada","Excelente"),
direction = "horizontal",
justified = T
),
radioGroupButtons(inputId = "Riesgo_lesion",
label = "Riesgo de lesiones cutáneas",
choices = c("Problema", "Problema potencial", "No existe problema aparente"),
direction = "horizontal",
justified = T
)
),
br(),
wellPanel(
h4("Resultado"),
fluidRow(
column(6,h6("Resultado numérico"),
verbatimTextOutput("resultado")),
column(6,h6("Interpretación"),
uiOutput("interpretacion"))
)
)
)
server <- function(input,output,session){
suma <- reactiveVal(0)
observe({
sensorial <- if_else(input$Sensorial == "Completamente limitada",1,
if_else(input$Sensorial == "Muy limitada",2,
if_else(input$Sensorial == "Ligeramente limitada",3,4)))
humedad <- if_else(input$Humedad == "Constantemente húmeda",1,
if_else(input$Humedad == "Húmeda con frecuencia",2,
if_else(input$Humedad == "Ocasionalmente húmeda",3,4)))
actividad <- if_else(input$Actividad == "Encamado",1,
if_else(input$Actividad == "En silla",2,
if_else(input$Actividad == "Deambula ocasionalmente",3,4)))
movilidad <- if_else(input$Movilidad == "Completamente inmovil",1,
if_else(input$Movilidad == "Muy limitada",2,
if_else(input$Movilidad == "Ligeramente limitada",3,4)))
nutricion <- if_else(input$Nutricion == "Muy pobre",1,
if_else(input$Nutricion == "Probablemente inadecuada",2,
if_else(input$Nutricion == "Adecuada",3,4)))
lesion <- if_else(input$Riesgo_lesion == "Problema",1,
if_else(input$Riesgo_lesion == "Problema potencial",2,3))
valor = sensorial + humedad + actividad + movilidad + nutricion + lesion
suma(valor)
})
output$resultado <- renderText({
suma()
})
output$interpretacion <- renderUI({
valor <- suma()
inter <- if_else(valor < 12, "Riesgo alto",
if_else(valor <= 15, "Riesgo medio",
if_else(valor <= 18,"Riesgo bajo","Sin riesgo")))
if (grepl("Riesgo alto", inter)) { # Si contiene "riesgobajo"
tags$pre(style = "color: red; font-weight: bold;", inter )
} else {
if (grepl("Riesgo medio", inter)) { # Si contiene "riesgobajo"
tags$pre(style = "color: orange; font-weight: bold;", inter )
} else {
if (grepl("Riesgo bajo", inter)) { # Si contiene "riesgobajo"
tags$pre(style = "color: #acaa0e; font-weight: bold;", inter )
} else {
if (grepl("Sin riesgo", inter)) { # Si contiene "riesgobajo"
tags$pre(style = "color: green; font-weight: bold;", inter )
}}}}
})
}
shinyApp(ui,server)