• Nenhum resultado encontrado

Por que não apenas usar funções?

N/A
N/A
Protected

Academic year: 2022

Share "Por que não apenas usar funções?"

Copied!
11
0
0

Texto

(1)Dashboards com R Módulos. Outubro de 2021.

(2) Problema Conforme o nosso aplicativo cresce, fica cada vez mais difícil manter o seu código em um único arquivo. Imaginem corrigir um errinho de digitação no título de um ggplot em um arquivo com 10 ggplots diferentes e mais de 5000 linhas... Cada alteração nesse arquivo vai exigir um CTRL+F. Além disso, conforme cresce o número de inputs e outputs, garantir que seus IDs são únicos se torna uma tarefa morosa e muito fácil de gerar erros.. 2 / 11.

(3) Por que não apenas usar funções? A nossa experiência com programação em R nos diria separar o código do app em vários arquivos, transformando partes da UI e do server em objetos ou funções. Assim, bastaria colocar esses arquivos dentro de uma pasta chamada R/ ou fazer source("arquivo_auxiliar.R) para cada arquivo auxiliar no início do código. O problema é que essa solução resolve o problema do tamanho do script, mas ainda assim precisaríamos nos preocupar com a unicidade dos IDs dos inputs e outputs.. 3 / 11.

(4) Módulos Módulos são uma alternativa para gerenciar a complexidade de aplicativos Shiny muito grandes que resolve o problema do tamanho dos scripts e da unicidade dos IDs. Na prática, módulos são uma adaptação do uso de funções que respeita a lógica UI/server de aplicativos Shiny. Isso é feito garantindo-se que os IDs de cada módulo são únicos.. 4 / 11.

(5) Estrutura de um módulo O primeiro conceito que precisamos guardar é que módulos são funções. Então, todas as regras válidas para a criação de uma função, valem para a criação de módulos. O segundo conceito fala sobre como enxergamos os módulos na prática. Cada módulo será uma parte do nosso aplicativo, um mini Shiny app que não pode ser rodado isoladamente. Quando modularizamos um aplicativo, o resultado final será um app composto por diversos pequenos aplicativos que funcionam conjuntamente. Assim, todo módulo possui uma UI e (opcionalmente) um server. O terceiro conceito diz respeito à unicidade dos IDs. Para cada módulo criado precisamos passar um id. No desenvolvimento do app, precisamos garantir que o id de cada módulo seja único e que os inputId e outputId dentro de cada módulo sejam únicos e estejam dentro da função ns(). Fazendo isso, garantimos a unicidade dos IDs entre módulos, isto é, no app como um todo.. 5 / 11.

(6) O código de um módulo histograma_ui <- function(id) { ns <- NS(id) tagList( selectInput( ns("variavel_x"), "Selecione uma variável", choices = names(mtcars) ), br(), plotOutput(ns("grafico")) ) } histograma_server <- function(id) { moduleServer(id, function(input, output, session) { output$grafico <- renderPlot({ hist(mtcars[[input$variavel_x]]) }) }) } 6 / 11.

(7) A UI de um módulo A UI de um módulo é apenas uma função de R. Essa função deve receber um id e devolver código HTML (um objeto com classe shiny.tag.list). A única diferença para a construção usual do objeto ui que vimos até agora é a utilização da função ns(). Essa função é criada pelo código ns <NS(id) e deve ser usada para embrulhar todos os inputId e outputId presentes no módulo. A função NS() cria uma função que cola o id passado para o módulo no começo de cada inputId e outputId dentro do módulo. Como o id de cada módulo é único, isso garante a unicidade dos IDs entre módulos. ns <- shiny::NS("meu_modulo") ns("id_do_input") ## [1] "meu_modulo-id_do_input". 7 / 11.

(8) O server de um módulo Assim como a UI, o servidor também é uma função que recebe um id. A diferença é que essa função deve retornar a chamada da função moduleServer(). A função moduleServer() recebe como primeiro argumento o id e como segundo a nossa função server habitual, isto é, a declaração de uma função com os argumentos input, output e session e que possua toda a lógica do servidor.. 8 / 11.

(9) Observações Um módulo grande o suficiente pode (e deve) ser dividido em módulos menores, isto é, você pode criar módulos dentro de módulos. Módulos são parametrizáveis e podem ser utilizados diversas vezes dentro de um mesmo app. Você pode passar quantos parâmetros quiser (além do parâmetro id) para a UI e server de um módulo. A UI e o servidor de um módulo não consegue acessar objetos, inputs, outputs ou valores reativos de outros módulos. Para acessar valores da ui ou da função server, cada valor deve ser passado explicitamente aos módulos como argumentos das funções. Toda função UI de um módulo deve começar com ns <- NS(id). É uma boa prática nomear igualmente as funções da UI e do servidor, trocando apenas o sufixo "ui" ou "server".. 9 / 11.

(10) Atividade Vamos construir um aplicativo Shiny modularizado.. Ao RStudio: 21-modulos-1/app.R e 22-modulos-2/app.R. 10 / 11.

(11) Referências e material extra Artigo sobre módulos da RStudio. 11 / 11.

(12)

Referências

Documentos relacionados

(Uerj) O número, em centenas de indivíduos, de um determinado grupo de animais, x dias após a liberação de um predador no seu ambiente, é expresso pela seguinte função:. Após

c) A relação de dependência é uma árvore:- Ou seja, um curso, módulo ou UI deve depender somente de um e só um curso, módulo ou UI. A hipótese simplificadora c) permite

Funções Reais: função escada, função módulo, funções lineares, funções polinomiais, funções racionais, funções trigonométricas, funções trigonométricas inversas,

Funções são tão comuns e intuitivas provavelmente você já usou funções no Excel, que mesmo sem definir o que elas são, nós já utilizamos funções nas seções anteriores:

Conclusão: Este estudo mostrou que os exames cito e anatomopatológicos da tireóide são objeto de análises frequentes em laboratório de anatomopatologia, e que a cada

Nota: sempre que, nos cálculos intermédios, proceder a arredondamentos, conserve, no mínimo, duas casas decimais. Cada ser vivo tem uma quantidade constante de carbono 14. Dado que

Enfim, Senhor, despojados assim os Templos, e derrubados os Altares, acabar-se-á no Brasil a Cristandade Católica: acabar- se-á o culto divino: nascerá erva nas Igrejas como

As frequências alélicas HPA variam muito entre grupos populacionais, e, portanto, a seleção de doadores genotipados para os principais polimorfismos dos