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.

Error de Flexdashboard: el objeto de tipo ‘closure’ no es subconjutable, al usar Reactive.

Estoy intentando crear un flexdashboard / shiny web app que lee una tabla de una base de datos SQL y, en función de los resultados de la consulta, crea una lista de símbolos únicos para mostrar en un selector.

Una vez seleccionado un símbolo único, luego necesita mostrar cierta información para ese símbolo (a partir de una consulta SQL) y luego mostrar información adicional de otra consulta SQL en otra tabla.

Como soy nuevo en R y shiny, tengo problemas para lograr que esto funcione como quiero. Esto es lo que tengo:

Columna {.sidebar}

“`{r}
unique_symbols <- query_to_df(db, query1)
selectInput('ticker', 'Ticker', unique_symbols$symbol)

<pre><code><br /><br /><br /><h2>Columna</h2>

<h3>Selección</h3>

“`{r}
reactive(unique_symbols %>% filter(symbol == input$ticker))

Obtengo

Imagen

Como por ahora solo estoy interesado en el campo security_name, cambié el código a esto:

df <- reactive(unique_symbols %> filter(symbol == input$ticker))
print(df$security_name)

Y obtengo:

Imagen

¿Por qué no puedo acceder a los elementos del df creado con reactive? He intentado diferentes soluciones para problemas similares publicados aquí, pero ninguna funciona para mí.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que estás intentando acceder al objeto reactivo como si fuera un dataframe. Necesitas utilizar el operador () para retornar el valor de un objeto reactivo. En este caso, puedes utilizar df()$security_name para acceder al campo “security name” del objeto reactivo. Además, asegúrate de colocar el objeto reactivo fuera de la función print() para retornar correctamente el valor en la interfaz de usuario. Aquí tienes un fragmento de código actualizado que debería funcionar:

    df <- reactive({
      unique_symbols %>%
        filter(symbol == input$ticker)
    })
    
    output$security_name <- renderText({
      df()$security_name
    })
    

    Este código crea una expresión reactiva df que filtra el dataframe unique_symbols basado en el valor seleccionado del ticker. La función df() devuelve el valor del objeto reactivo. En la función renderText(), accedemos al campo security_name del dataframe devuelto utilizando df()$security_name. Esto debería mostrar correctamente el nombre de seguridad seleccionado en la interfaz de usuario.

Comments are closed.