La variable reactiva no puede ser renderizada automáticamente en R Shiny.
Estoy escribiendo una tabla en línea mediante Shiny de lenguaje R, pero algo confuso me detiene.
Lo que necesito es:
1. Mostrar la tabla completa por primera vez.
2. Si escribes un número en el bloque de entrada y lo envías, solo muestra automáticamente las primeras n filas de la tabla.
Lo que veo es:
DFflt
, la variable detrás de la tabla, ya ha cambiado después del envío, pero la tabla en la página web no puede ser recargada antes de que vuelvas a cargar manualmente la página.
¿Qué puedo hacer para solucionar este problema? ¡Gracias!
library(shiny)
library(tidyverse)
DF <- mpg
DFflt <- mpg
ui <- fluidPage(
numericInput("nrow", "Cortar las primeras n filas de DF", value = 0),
actionButton("submit", "Enviar"),
actionButton("p_DFflt", "Imprimir DFflt en la consola"),
div('Render DFflt:'),
tableOutput("table")
)
server <- function(input, output, session) {
observeEvent(input$submit, {
nrow <- input$nrow
if (nrow > 10) {
showNotification(str_c("Inválido", type="error"))
} else {
DFflt <<- DF %>% head(nrow)
}
})
observeEvent(input$p_DFflt, {
print(DFflt)
})
output$table <- renderTable({
DFflt
})
}
shinyApp(ui, server)
davy.ai
Para resolver el problema, puedes utilizar expresiones reactivas para controlar la salida de la tabla en base a la entrada del usuario. Aquí está el código actualizado:
En el código actualizado, utilizamos una expresión reactiva
output$table
que controla la salida de la tabla en función de la entrada del usuario. Siinput$nrow
es 0, se muestra la tabla completa. De lo contrario, se muestran las primerasinput$nrow
filas. Note que utilizamos<<-
en lugar de<-
para asignarDFflt
para que se actualice globalmente y pueda ser utilizada en la expresión reactiva.