que language framework apps r environment shiny scoping

language - Ambientes en R Shiny



r apps (1)

Gracias por esa referencia Stephane. Si un objeto se define antes de shinyServer (), usar << - en cualquier lugar dentro de shinyServer () cambiará el valor para todas las instancias de la aplicación. Si el objeto está definido dentro de shinyServer (), entonces << - (dentro o fuera de una función) solo cambiará el valor para esa instancia de la aplicación.

Arreglé una pequeña aplicación con un contador e identificadores de instancia para probar esto. Ejecutar dos instancias de la aplicación y cambiar entre ellas aumentando el conteo demuestra el efecto de << -

ui.r

library(shiny) shinyUI(pageWithSidebar( headerPanel("Testing Environments"), sidebarPanel( actionButton("increment_counter", "Increase Count") ), mainPanel( tabsetPanel( tabPanel("Print", verbatimTextOutput("text1")) )) ))

server.r

instance_id<-1000 shinyServer(function(input, output, session) { instance_id<<-instance_id+1 this_instance<-instance_id counter<-0 edit_counter<-reactive({ if(input$increment_counter>counter){ counter<<-counter+1 } list(counter=counter) }) output$text1 <- renderPrint({ cat(paste("Session ID: ",Sys.getpid()," /n")) cat(paste("Global Instance ID: ",instance_id," /n")) cat(paste("This Instance ID: ",this_instance," /n")) cat(paste("Button Value: ",input$increment_counter," /n")) cat(paste("Counter Value: ",edit_counter()$counter," /n")) }) }) # end server function

En http://shiny.rstudio.com/articles/scoping.html las reglas para determinar el alcance en brillante están bien explicadas. Hay 3 entornos o niveles anidados dentro de cada uno: objetos disponibles dentro de una función, dentro de una sesión y dentro de todas las sesiones. El uso de <- cambiará el objeto dentro del entorno en el que se encuentra y << - lo cambiará globalmente, es decir, para todas las sesiones.

¿Qué sucede si defino una variable dentro de la sesión pero quiero cambiarla dentro de una función?

<- simplemente lo cambiará dentro de la función para que no sea legible por otras funciones y << - lo cambiará para todas las sesiones. ¿No hay nada en medio? ¿Te gusta "solo un nivel arriba"?