Variáveis compartilhadas entre sessões do Shiny

O uso de variáveis compartilhadas entre sessões é muito interessante em aplicações web como Shiny. Através delas é possível evitar redundância de dados que são iguais para todos os usuários, economizando tempo de carga da aplicação e memória.

Escopo de Sessão

O que define a o escopo de sessão de usuário no Shiny é uma função de assinatura ”function(input, output, session)”.

Em uma aplicação Shiny de arquivo único ”app.R”, é a função:

server <- function(input, output, session) {
  # Variáveis e funções de escopo de sessão
})

Já em uma aplicação Shiny separada em arquivos ui.R, server.R e global.R, o escopo da sessão é definido pelo conteúdo da função declarada no arquivo ”server.R”, como segue:

shinyServer(function(input, output, session) {
  # Variáveis e funções de escopo de sessão
})

Variáveis compartilhadas

Para utilizar variáveis compartilhadas entre sessões em uma aplicação Shiny, basta declará-las fora da função de sessão descrita acima, no arquivo ”app.R” ou ”server.R”. Exemplo:

# Variáveis e funções de escopo de sessão
var1 <- 5
var2 <- 'Variável compartilhada'

shinyServer(function(input, output, session) {
  
  # Variáveis e funções de escopo de sessão
  var3 <- 'Valor de sessão'

})

Simples assim. Existe apenas uma variável ”var1” e ”var2” alocada na aplicação, compartilhada entre sessões. Já a variável var3 existe no contexto de cada sessão de usuário.

Atribuição de variáveis compartilhadas

É necessário cuidado especial na atualização das variáveis compartilhadas, que utiliza o operador especial ”<<-”. Exemplo:

var1 <- 5

shinyServer(function(input, output, session) {
  
  # Cria uma variável de sessão var1, atribuindo o valor 6
  # A variável compartilhada com as outras sessões segue com o valor 5
  
  var1 <- 6
  
  # Atribui o valor 7 à variável var1. Outras sessões de usuário que
  # utilizarem a variável var1 também acessam o valor atualizado 7
  
  var1 <<- 7

})

Deixe um comentário