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).
ui <- fluidPage(
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)
server <- function(input, output){
output$dadosId <- renderTable(head(dados))
output$plotId <- renderPlot({
hist(Sepal.Width, col = "red")})
output$sumId <- renderPrint(summary(dados))
} 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).
datasetInput <- reactive({
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 .
output$dadosId <- renderTable({
head(dados)})
output$plotId <- renderPlot({
Sepal.Length <- hist(datasetInput(), col = "red",
ylab = "Frequência", xlab = input$dataset,
main = c("Histograma de ",input$dataset ))
})
output$sumId <- renderPrint(summary(datasetInput()))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.
ui <- fluidPage(
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"))
)
)
)
)
server <- function(input, output){
datasetInput <- reactive({
switch(input$dataset,
"Sepal.Length" = Sepal.Length,
"Sepal.Width" = Sepal.Width,
"Petal.Length" = Petal.Length,
"Petal.Width" = Petal.Width)
})
output$dadosId <- renderTable({
head(dados)})
output$plotId <- renderPlot({
Sepal.Length <- hist(datasetInput(), col = "red",
ylab = "Frequência", xlab = input$dataset,
main = c("Histograma de ",input$dataset ))
})
output$sumId <- renderPrint(summary(datasetInput()))
}
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.