class: center, middle, inverse, title-slide # Workflow Básico ## Boas práticas ### Beatriz Milz ### Grupo de estudos - R-Ladies São Paulo ### 07 de julho de 2021 --- <style type="text/css"> .remark-slide-content{ font-size: 1.2rem; } </style> ## Referência .pull-left[ <img src="https://r4ds.hadley.nz/cover.png" width="60%" style="display: block; margin: auto;" /> ] .pull-right[ - Livro: R para Ciência de Dados - Apresentação baseada na [2 edição do livro](https://r4ds.hadley.nz/index.html) (está em processo de escrita) - Capítulos: - [Workflow: Basics](https://r4ds.hadley.nz/workflow-basics.html) - [Workflow: Scripts](https://r4ds.hadley.nz/workflow-scripts.html) - [Workflow: Projects](https://r4ds.hadley.nz/workflow-projects.html) ] --- class: middle, center, inverse ## Workflow: Básico --- ### R como uma calculadora - Podemos usar o R como uma calculadora: ```r 1 / 200 * 30 ``` ``` ## [1] 0.15 ``` ```r (59 + 73 + 2) / 3 ``` ``` ## [1] 44.66667 ``` ```r sin(pi / 2) ``` ``` ## [1] 1 ``` --- ### Criando objetos - Podemos criar objetos (e guardar resultados) usando o operador de atribuição `<-`, e a estrutura a seguir: ``` nome_do_objeto <- valor ``` .pull-left[ Exemplo: ```r x <- 3 * 4 ``` Podemos ver o conteúdo do objeto escrevendo o nome e executando: ```r x ``` ``` ## [1] 12 ``` ] .pull-right[ Outra opção é criar o objeto e envolvê-lo com parênteses: ```r (y <- 3 * 4) ``` ``` ## [1] 12 ``` ] --- ### Boas práticas e objetos - Atalho `Alt -` (Alt e menos) serve para escrever o sinal de atribuição mais rápido. - O sinal `=` também funciona neste caso: não use :) - Aproveite para usar a tecla Tab no RStudio: ajuda a autocompletar! - O R é *case sensitive*: ```r r_rocks <- 2 ^ 3 ``` ```r r_rock #> Error: object 'r_rock' not found R_rocks #> Error: object 'R_rocks' not found r_rocks #> [1] 8 ``` - Erros de digitação e de maiúscula/minúscula importam! --- ### Boas práticas e objetos - Cuidado ao dar nomes aos objetos: ```r eu_uso_snake_case outrasPessoasUsamCamelCase algumas.pessoas.usam.pontos E_Algumas.Pessoas_RENUNCIAMconvenções ``` - O [tidyverse style guide](https://style.tidyverse.org/) usa snake case. --- ### Utilizando funções - O R possui muitas funções disponíveis - Estrutura para utilizar uma função: ```r nome_da_funcao(nome_do_argumento_1 = valor_para_o_argumento1, nome_do_argumento_2 = valor_para_o_argumento2, nome_do_argumento_3 = valor_para_o_argumento3, ...) ``` Exemplo: ```r seq(from = 1, to = 10) ``` ``` ## [1] 1 2 3 4 5 6 7 8 9 10 ``` - Parênteses (e aspas) sempre devem estar em "duplas": se abrirmos, temos que fechar. --- class: middle, center, inverse ## Workflow: Scripts --- ### Scripts .pull-left[ <img src="https://r4ds.hadley.nz/diagrams/rstudio-editor.png" width="100%" style="display: block; margin: auto;" /> ] .pull-right[ - Podemos salvar nossos scripts para utilizar depois! - Considere tudo no console como temporário, pois não salvamos o conteúdo. - Escreva no Script/Editor os códigos importantes para a análise. ] --- ### Executando códigos - O atalho `Cmd/Ctrl + Enter` é um dos mais úteis! Executa o código selecionado, ou o trecho de código onde o cursor está. - O atalho `Cmd/Ctrl + Shift + S` executa todos os códigos do script! - Recomendado escrever os códigos para carregar pacotes (`library()`) no início do código da análise Autores: > "Note, however, that you should never include `install.packages()` or `setwd()` in a script that you share. It’s very antisocial to change settings on someone else’s computer!" --- class: middle, center, inverse ## Workflow: Projects --- ### O que é "real"? - O que você salvaria como o último registro do que aconteceu na análise? - Onde a nossa análise "vive"? -- - Scripts x Environment - É muito mais fácil recriar os objetos do Environment a partir dos códigos que escrevemos no script do que o contrário. --- ### Boas práticas .pull-left[ Configure o RStudio para não salvar o workspace entre as sessões: Tools > Global Options > ... <img src="https://r4ds.hadley.nz/screenshots/rstudio-workspace.png" width="70%" style="display: block; margin: auto;" /> ] .pull-right[ - Ao reiniciar o RStudio e a sessão do R, o Workspace será limpo. - Isso nos obriga a registrar todas as etapas importantes no código. Recomendo a leitura: [Capítulo .RData e .Rhistory, livro Zen do R](https://curso-r.github.io/zen-do-r/rdata-rhistory.html) ] --- ### Onde as análises vivem? - **Working directory/diretório de trabalho**: é o lugar (uma pasta no computador) onde o R irá procurar pelos arquivos quando queremos importá-los, ou onde ele irá salvar os arquivos quando queremos exportá-los. -- Como saber qual é o diretório de trabalho atual? - Olhando o console; - Usando a função `getwd()`: ```r getwd() # para saber qual é o diretório de trabalho ``` ``` ## [1] "/Users/beatrizmilz/GitHub/grupo_de_estudos/" ``` Também existe a função `setwd()` para mudar o diretório de trabalho, mas isso **não é recomendado**! --- ### Caminhos - **Caminhos absolutos** vs **Caminhos relativos** - Caminhos absolutos são caminhos que apontam para o mesmo lugar independente do diretório de trabalho. - Caminhos relativos são caminhos que partem do diretório de trabalho. --- ### Exemplo Caminhos até o arquivo [`index.html` desta apresentação](https://github.com/R-Ladies-Sao-Paulo/grupo_de_estudos/blob/main/r4ds/02-workflow/index.html) - Caminho absoluto: ``` "~/GitHub/grupo_de_estudos/r4ds/02-workflow/index.html" ``` - Caminho relativo: ``` "r4ds/02-workflow/index.html" ``` > "You should **never** use absolute paths in your scripts, because they hinder sharing: no one else will have exactly the same directory configuration as you." > "Você **nunca** deve usar caminhos absolutos em seus scripts, porque eles dificultam o compartilhamento: ninguém mais terá exatamente a mesma configuração de diretório que você." --- ### Projetos do RStudio .pull-left[ - O projeto é um local (uma pasta no nosso computador) onde teremos todos os arquivos necessários para nossa análise: - Dados utilizados - Scripts em R - Figuras - Resultados de análises - Entre outros - Quando usamos projetos do RStudio, o nosso diretório de trabalho é a pasta do projeto. ] .pull-right[ - Crie um projeto do RStudio `.RProj` para cada novo projeto de análise de dados; - Sempre use caminhos relativos; - Recomendação de leitura: [Capítulo Rproj e diretórios - Livro Zen do R](https://curso-r.github.io/zen-do-r/rproj-dir.html) ] --- ### Criando um projeto .pull-left[ <img src="https://r4ds.hadley.nz/screenshots/rstudio-project-1.png" width="70%" style="display: block; margin: auto;" /><img src="https://r4ds.hadley.nz/screenshots/rstudio-project-2.png" width="70%" style="display: block; margin: auto;" /> ] .pull-right[ <img src="https://r4ds.hadley.nz/screenshots/rstudio-project-3.png" width="70%" style="display: block; margin: auto;" /> ] --- class: middle, center, inverse ### Demonstração no R Usando o pacote dados: https://cienciadedatos.github.io/dados/ <img src="https://media.giphy.com/media/VbnUQpnihPSIgIXuZv/giphy-downsized.gif" width="30%" style="display: block; margin: auto;" /> ??? - Criar um projeto - Mostrar a função getwd() --- class: middle, center, inverse ## Extra --- ### Estilo de escrita O que é melhor para ler? - Opção 1: ```r library(tidyverse) library(dados) diamante %>% filter(corte == "Bom") %>% ggplot() + geom_boxplot(aes(transparencia, preco, fill = transparencia)) ``` - Opção 2: ```r library(tidyverse) library(dados) diamante %>% filter(corte == "Bom") %>% ggplot() + geom_boxplot(aes(transparencia, preco, fill = transparencia)) ``` --- ### Como manter/checar o estilo de escrita? - Atalho `Ctrl + Shift + A` - Melhor ainda: pacote [`styler`](https://styler.r-lib.org/) - formata de acordo com o [tidyverse style guide](https://style.tidyverse.org/) <img src="https://raw.githubusercontent.com/lorenzwalthert/some_raw_data/master/styler_0.1.gif" width="50%" style="display: block; margin: auto;" /> --- ### E se você quer experimentar mais.. - Pacote [`lintr`](https://github.com/jimhester/lintr) <img src="https://camo.githubusercontent.com/454e2d641d7982415eac9cbb4ebb546cb9b2664490e1d7da8568bc92511f8de1/687474703a2f2f692e696d6775722e636f6d2f50494b6e70626e2e706e67" width="50%" style="display: block; margin: auto;" /> --- class: middle, center ## Obrigada! E se você gosta desse assunto, recomendo também o livro [Zen do R](https://curso-r.github.io/zen-do-r/index.html): [ <img src="https://curso-r.github.io/zen-do-r/assets/hex.png" width="30%" style="display: block; margin: auto;" /> ](https://curso-r.github.io/zen-do-r/index.html)