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.

No se encuentra el objeto de sesión de Shiny al intentar usar shinyJS().

En la aplicación Shiny a continuación, estoy tratando de usar shinyJS() para ocultar y mostrar texto, pero obtengo el siguiente error:

Error: shinyjs: no se pudo encontrar el objeto de sesión de Shiny. Esto suele ocurrir cuando se llama a una función de shinyjs desde un contexto que no fue configurado por una sesión de Shiny.

No te preocupes por el hecho de que el conjunto de datos no existe, es solo un ejemplo.

## app.R ##
library(shiny)
library(shinydashboard)
library(dplyr)
library(shinyjs)

ui <- dashboardPage(
  dashboardHeader(title = "Biodiversidad"),
  dashboardSidebar(

    actionButton("action","Enviar")


  ),
  dashboardBody(
    useShinyjs(),

    show(
      div(id='text_div',
          verbatimTextOutput("text")
      )
    ),
    uiOutput("help_text"),
    plotlyOutput("plot")
  )
)

server <- function(input, output) {
  output$help_text <- renderUI({
    HTML("<b>Haz clic en 'Mostrar gráfico' para mostrar el gráfico.</b>")
  })


  react <- eventReactive(input$action,{
    hide("help_text")

    omited <- subset(omited, omited$scientificName %in% isolate(input$sci) & omited$verbatimScientificName %in% isolate(input$ver))
  })




}

shinyApp(ui = ui, server = server)
Tags:  , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error “no se pudo encontrar el objeto de sesión Shiny” generalmente ocurre cuando se llama a una función shinyjs desde un contexto que no está configurado por una sesión Shiny. En el código proporcionado, ShinyJS se carga e inicializa con la función useShinyjs(), pero no se utiliza ninguna función de ShinyJS.

    Analizando el código, la función react eventReactive está ocultando la salida help_text con la función hide(). Para usar esta función correctamente, debe estar envuelta en un contexto de sesión Shiny. Una forma de lograr esto es usando la función runjs() de la paquete shinyjs con un fragmento de código JavaScript que llama a la función ShinyJS, de esta manera:

    shinyjs::runjs('shinyjs.hide("help_text");')
    

    Esto ejecutará la función hide() en el contexto de la sesión Shiny y debería resolver el mensaje de error.

    Entonces, el objeto react actualizado se vería así:

    react <- eventReactive(input$action,{
       shinyjs::runjs('shinyjs.hide("help_text");')
    
       omited <- subset(omited, omited$scientificName %in% isolate(input$sci) &
         omited$verbatimScientificName %in% isolate(input$ver))
    })
    

    Ten en cuenta que se carga la biblioteca dplyr, pero el marco de datos omited no está definido, por lo que esto generará un error durante la ejecución.

Comments are closed.