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"?