una titles recorrer plots matriz loop iteraciones hacer data como columna r shiny

titles - recorrer una columna en r



Cómo hacer para bucle reactivo en servidor brillante en R? (1)

Como traté de retransmitir el comentario, mueva el for loop fuera de la primera función renderPrint() , de modo que h1-h5 esté disponible tanto para la output$a como para la output$b .

Desde su código, no hay ninguna razón por la cual el bucle deba restringirse solo a la output$a ya que su parámetro m se define afuera de todos modos:

library(shiny) ui <- fluidPage( mainPanel(fluidRow(textOutput("a")), fluidRow(textOutput("b"))) ) server <- function(input, output) { m <- reactive({1:5}) for (i in 1:length(m)){ assign(paste0("h",i), "u") } output$a <- renderPrint({ list(h1,h2) }) output$b <- renderPrint({ list(h1,h2) }) } shinyApp(ui = ui, server = server)

Estoy usando assign en for loop para crear nuevas variables que quiero usar en más de una salida en ui brillante. Lo que sigue es un código de muestra:

library(shiny) ui <- fluidPage( mainPanel(fluidRow(textOutput("a")), fluidRow(textOutput("b"))) ) server <- function(input, output) { m <- reactive({1:5}) output$a <- renderPrint({ for (i in 1:length(m())){ assign(paste0("h",i), "u") } list(h1,h2) }) output$b <- renderPrint({ list(h1,h2) }) } shinyApp(ui = ui, server = server)

Problema

Cada output en el server tiene su propio entorno. Por lo tanto, las variables h1 a h5 se crean dentro del output a y, por lo tanto, no son accesibles para el output b . Vea el resultado de la ejecución de la aplicación:

[[1]] [1] "u" [[2]] [1] "u" [[1]] function (...) tags$h1(...) <environment: namespace:htmltools> [[2]] function (...) tags$h2(...) <environment: namespace:htmltools>

Idealmente, la segunda línea debería ser la misma que la primera línea. Si muevo el for loop al server , hay un problema de reactividad:

Error in .getReactiveEnvironment()$currentContext() : Operation not allowed without an active reactive context. (You tried to do something that can only be done from inside a reactive expression or observer.)

Pregunta

¿Cómo puedo hacer que el for loop reactivo para que todas las salidas puedan acceder a ellos?

EDITAR

También intenté hacer las siguientes output externas:

observe({for (i in 1:length(m())){ assign(paste0("om",i), "u") }})

y

reactive({for (i in 1:length(m())){ assign(paste0("om",i), "u") }})

Como h1 ya es una función brillante, cambié el nombre del objeto a "om". Pero el uso de cualquiera de los anteriores no ofrece buenos resultados:

output$a <- renderPrint({ list(length(m()), om1) }) output$b <- renderPrint({ om1() }) Error: object ''om1'' not found Error: could not find function "om1"