es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

En Shiny R, renderiza HTML de manera condicional basándose en la selección del usuario.

Quiero mostrar diferentes archivos HTML según la entrada del usuario. Básicamente, el usuario hace su selección en dos elementos “pickerinput” y, según la selección, se muestra un archivo HTML diferente.

Tengo en mi archivo “ui.R”

fluidRow(style = "background-color:#FFFAFA00;",
  htmlOutput("example")
)

y en mi archivo “server.R”

example <- reactive({
  if (input$chap == "ai" & input$cat == "ch") {
    htmlOutput("aich")
  } 
  else if (input$chap == "ai" & input$cat == "pr") {
    htmlOutput("aipr")
  }
})

No sucede nada cuando se selecciona. ¿Alguna idea sobre esto?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    ¿Problema?

    Parece que estás intentando usar la función htmlOutput dentro de tu expresión reactive en el archivo del servidor. Sin embargo, htmlOutput es en realidad una función que se utiliza en el archivo de la interfaz de usuario (UI) para decirle a Shiny dónde colocar el contenido HTML que se genera en el servidor.

    Para mostrar diferentes archivos HTML según la entrada del usuario, puedes usar la función renderUI en el archivo del servidor. Esta función toma una expresión reactiva como entrada y genera la salida HTML basada en su valor.

    Aquí tienes un ejemplo de cómo podrías modificar tu código:

    En el archivo de la interfaz de usuario (UI):

    fluidRow(style = "background-color:#FFFAFA00;",
             uiOutput("example"))
    

    En el archivo del servidor:

    output$example <- renderUI({
      if (input$chap == "ai" & input$cat == "ch") {
        includeHTML("aich.html")
      } else if (input$chap == "ai" & input$cat == "pr") {
        includeHTML("aipr.html")
      } else {
        NULL
      }
    })
    

    En este ejemplo, la función renderUI toma una declaración if que verifica los valores de dos elementos pickerInput llamados chap y cat. Si el usuario selecciona “ai” y “ch” en esas entradas, genera una salida HTML utilizando la función includeHTML, que toma una ruta de archivo como entrada. De lo contrario, devuelve NULL.

    Ten en cuenta que necesitarías tener los archivos HTML aich.html y aipr.html guardados en el directorio de tu aplicación para que esto funcione.

Comments are closed.