4 Reatividade
A função reactive
é um recurso do pacote Shiny
que permite a interação de maneira automática entre o ui
e server
.
4.1 Modelo de reactividade
Utilizando o Exemplo 3 (Capítulo 3) onde deseja-se que o aplicativo tenha a opção de elecionar uma das variáveis e em seguida obter o seu respectivo histograma. Para isso será necessário usar a função selectInput()
. Antes uma revisão das etapas utilizadas na construção do aplicativo mostrado no Capítulo 3.
Construção da interface do usuário (ui).
<- fluidPage(
ui titlePanel("Aplicativo Shiny com dataset IRIS"),
sidebarLayout(
sidebarPanel(
h2("Aplicação não reativa"),
p("Este exemplo mostra a interação entre UI e SERVER,
sem que tenha a necessidade de uma função reativa.")),
mainPanel(
tabsetPanel(
tabPanel("Dados",tableOutput("dadosId")),
tabPanel("Gráfico", plotOutput("plotId")),
tabPanel("Summary", verbatimTextOutput("sumId"))
))))
Construção do servidor (server)
<- function(input, output){
server $dadosId <- renderTable(head(dados))
output
$plotId <- renderPlot({
outputhist(Sepal.Width, col = "red")})
$sumId <- renderPrint(summary(dados))
output
}
E por fim, o código que gera o app em uma nova seção do RStudio.
shinyApp(ui = ui, server = server)
A função selectInput()
permitirá a construção de uma lista de opções e nesta lista será incluído todas as variáveis quantitativas do dataset iris, conforme exemplo abaixo.
4.2 Recurso reativo
Adcionando um recurso reativo (ui).
selectInput("dataset", "Escolha uma variável",
c("Sepal.Length","Sepal.Width",
"Petal.Length","Petal.Width"))
Criando a função reativa (server).
<- reactive({
datasetInput switch(input$dataset,
"Sepal.Length" = Sepal.Length,
"Sepal.Width" = Sepal.Width,
"Petal.Length" = Petal.Length,
"Petal.Width" = Petal.Width)
})
A função reativa foi criada e salva em objeto chamado datasetInput
onde recebe input$dataset
que imputa os valores criados no ui e salvo na lista dataset
. Os valores a esquerda e entre aspas são os valores que aparecerá para o usuário, e os valores a direita são os valores das variáveis conforme descritas no dataset.
Após criar a função reactive
será necessário ajustar os output .
$dadosId <- renderTable({
outputhead(dados)})
$plotId <- renderPlot({
output<- hist(datasetInput(), col = "red",
Sepal.Length ylab = "Frequência", xlab = input$dataset,
main = c("Histograma de ",input$dataset ))
})$sumId <- renderPrint(summary(datasetInput())) output
Observe que ao realizar a plotagem do histograma em xlab
foi atribuído o valor input$dataset
que altera o valor no eixo x do histograma toda a vez que a variável for alterada, o mesmo ocorre para o título do histograma.
Gerando o aplicativo.
shinyApp(ui = ui, server = server)
Código completo do aplicativo usando a reactividade.
<- fluidPage(
ui titlePanel("Aplicativo Shiny com dataset IRIS"),
sidebarLayout(
sidebarPanel(
h2("Aplicação reativa"),
p("Este exemplo mostra a interação entre UI e SERVER,
usando uma função reativa."),
selectInput("dataset", "Escolha uma variável",
c("Sepal.Length","Sepal.Width",
"Petal.Length","Petal.Width"))
),
mainPanel(
tabsetPanel(
tabPanel("Dados",tableOutput("dadosId")),
tabPanel("Gráfico", plotOutput("plotId")),
tabPanel("Summary", verbatimTextOutput("sumId"))
)
)
)
)
<- function(input, output){
server
<- reactive({
datasetInput switch(input$dataset,
"Sepal.Length" = Sepal.Length,
"Sepal.Width" = Sepal.Width,
"Petal.Length" = Petal.Length,
"Petal.Width" = Petal.Width)
})
$dadosId <- renderTable({
outputhead(dados)})
$plotId <- renderPlot({
output<- hist(datasetInput(), col = "red",
Sepal.Length ylab = "Frequência", xlab = input$dataset,
main = c("Histograma de ",input$dataset ))
})
$sumId <- renderPrint(summary(datasetInput()))
output
} shinyApp(ui = ui, server = server)
O resultado da aplicação pode ser observado na Figura 4.1.

Figure 4.1: Aplicação Shiny com uso da função reactive().
Fonte: Elaborado pela autora.
Ao alterar as opções, o histograma será modificado de acordo com a variável selecionada, conforme mostra a Figura 4.2 quando é selecionado a variável Sepal.Length.

Figure 4.2: Aplicação Shiny com uso da função reactive().
Fonte: Elaborado pela autora.
Copie o código para o seu RStudio e teste você mesmo.
A seguir é disponibilizado dois links de aplicativos interativo usando a linguagem R e Python para base de dados utilizada no capítulo 5.
Aplicativo Streamlit para aprendizado de máquina usando Python.