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
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:
¿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í.
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 utilizardf()$security_name
para acceder al campo “security name” del objeto reactivo. Además, asegúrate de colocar el objeto reactivo fuera de la funciónprint()
para retornar correctamente el valor en la interfaz de usuario. Aquí tienes un fragmento de código actualizado que debería funcionar:Este código crea una expresión reactiva
df
que filtra el dataframeunique_symbols
basado en el valor seleccionado del ticker. La funcióndf()
devuelve el valor del objeto reactivo. En la funciónrenderText()
, accedemos al camposecurity_name
del dataframe devuelto utilizandodf()$security_name
. Esto debería mostrar correctamente el nombre de seguridad seleccionado en la interfaz de usuario.