O que é R?

Tipos de Varíaveis e Estrutura de Dados

Jose Storopoli https://scholar.google.com/citations?user=xGU7H1QAAAAJ&hl=en (UNINOVE)https://www.uninove.br
April 5, 2021

Bem vindos à disciplina!

Bem-vindo!

Figure 1: Bem-vindo!

Conteúdos

Vamos usar todo o universo do {tidyverse}!

Professor

José Eduardo Storopoli (Duda)

O que é R?

R vem da linguagem S que é uma linguagem estatística desenvolvida na Bell Labs na década de 1970s. E R é o “filho” opensource do S.

Rmarkdown é uma boa combinação de gráficos, narrativa e código. Veja o exemplo da figura abaixo.

Exemplo de um Plot em R

Figure 2: Exemplo de um Plot em R

Tipos de Variáveis do R

typeof(1L)
[1] "integer"
typeof(1.0)
[1] "double"
typeof(TRUE)
[1] "logical"
typeof("Oi!")
[1] "character"
[1] TRUE

Estruturas de Dados

OBS: Para designar podemos usar o x = valor, mas usamos o <- pois não permite equivalência ela assinala tudo que está a direita da flecha para a variável à esquerda da flecha. Ex x <- valor (similar ao x := valor). Inclusive alt + - gera um <- com um whitespace ao redor.

vetor_integer <- c(1L, 7L:9L)
vetor_integer
[1] 1 7 8 9
typeof(vetor_integer)
[1] "integer"
is.numeric(vetor_integer)
[1] TRUE
vetor_doubles <- c(1, 7:9)
vetor_doubles
[1] 1 7 8 9
typeof(vetor_doubles)
[1] "double"
is.numeric(vetor_doubles)
[1] TRUE
vetor_logical <- c(TRUE, FALSE)
vetor_logical
[1]  TRUE FALSE
typeof(vetor_logical)
[1] "logical"
vetor_character <- c("Oi!", "Tchau!")
vetor_character
[1] "Oi!"    "Tchau!"
typeof(vetor_character)
[1] "character"
lista_mista <- list("Oi!", TRUE, 1L)
typeof(lista_mista)
[1] "list"
vetor_coerce <- c("Oi!", TRUE, 1L)
vetor_coerce
[1] "Oi!"  "TRUE" "1"   
typeof(vetor_coerce)
[1] "character"

OBS: Named List

lista_nomeada <- list(
  "character" = "Oi!",
  "logical" = TRUE,
  "integer" = 1L
)

str(lista_nomeada)
List of 3
 $ character: chr "Oi!"
 $ logical  : logi TRUE
 $ integer  : int 1

O que podemos fazer com vetores e listas?

str(lista_nomeada[1])
List of 1
 $ character: chr "Oi!"
str(lista_nomeada[[1]])
 chr "Oi!"
str(lista_nomeada$logical)
 logi TRUE
str(lista_nomeada[["logical"]])
 logi TRUE
str(lista_nomeada["character"])
List of 1
 $ character: chr "Oi!"
str(lista_nomeada[1:2])
List of 2
 $ character: chr "Oi!"
 $ logical  : logi TRUE

data.frames e tibbles

df <- data.frame(
  a = sample(c("A", "B"), 100, replace = TRUE),
  x = runif(100),
  y = rnorm(100),
  dia = "hoje"
)
df
    a     x      y  dia
1   B 0.475 -1.461 hoje
2   B 0.740 -1.268 hoje
3   A 0.473  1.043 hoje
4   A 0.439 -1.204 hoje
5   A 0.543 -0.860 hoje
6   B 0.883  0.118 hoje
7   B 0.301 -0.341 hoje
8   B 0.991  0.477 hoje
9   B 0.947 -0.675 hoje
10  A 0.908 -0.534 hoje
11  B 0.701 -1.780 hoje
12  A 0.638  0.427 hoje
13  A 0.743  1.118 hoje
14  A 0.491 -0.373 hoje
15  B 0.368  0.252 hoje
16  B 0.902 -0.081 hoje
17  B 0.041  0.771 hoje
18  A 0.257  2.454 hoje
19  A 0.020  1.439 hoje
20  B 0.225  0.501 hoje
21  B 0.386 -0.757 hoje
22  A 0.306 -0.081 hoje
23  B 0.013  0.712 hoje
24  B 0.048 -2.689 hoje
25  B 0.952  1.276 hoje
26  B 0.684  0.012 hoje
27  B 0.798  0.751 hoje
28  A 0.135  0.409 hoje
29  A 0.718 -1.697 hoje
30  B 0.643 -0.083 hoje
31  B 0.878  0.106 hoje
32  A 0.134 -0.420 hoje
33  A 0.722  0.629 hoje
34  B 0.133 -0.451 hoje
35  B 0.536 -0.349 hoje
36  B 0.894  0.932 hoje
37  A 0.503  0.313 hoje
38  A 0.636  1.550 hoje
39  A 0.995 -0.047 hoje
40  B 0.047  0.801 hoje
41  B 0.632 -0.118 hoje
42  B 0.900  0.415 hoje
43  B 0.844  2.000 hoje
44  B 0.790 -0.686 hoje
45  B 0.798 -0.646 hoje
46  B 0.404  0.465 hoje
47  A 0.279 -0.426 hoje
48  B 0.582  0.964 hoje
49  B 0.301  0.905 hoje
50  A 0.326  0.536 hoje
51  A 0.924  0.350 hoje
52  A 0.026 -1.194 hoje
53  B 0.577  1.681 hoje
54  A 0.294  0.799 hoje
55  A 0.112  0.025 hoje
56  B 0.389 -0.728 hoje
57  A 0.680 -2.917 hoje
58  B 0.763  0.061 hoje
59  A 0.135  0.467 hoje
60  B 0.113  0.648 hoje
61  B 0.540  0.642 hoje
62  B 0.754 -0.233 hoje
63  B 0.968 -1.605 hoje
64  B 0.407  0.408 hoje
65  B 0.580 -1.416 hoje
66  A 0.420  1.061 hoje
67  A 0.620 -0.544 hoje
68  A 0.458 -0.736 hoje
69  A 0.841 -1.548 hoje
70  A 0.821  1.844 hoje
71  A 0.939  0.315 hoje
72  B 0.499  0.941 hoje
73  B 0.744 -0.589 hoje
74  A 0.471 -1.310 hoje
75  A 0.684 -0.581 hoje
76  A 0.757 -0.595 hoje
77  B 0.731 -0.090 hoje
78  A 0.817 -0.749 hoje
79  A 0.875  0.245 hoje
80  A 0.314  0.448 hoje
81  A 0.806 -0.192 hoje
82  A 0.725 -0.414 hoje
83  A 0.434 -0.360 hoje
84  A 0.523 -1.450 hoje
85  B 0.321 -0.874 hoje
86  B 0.596  0.730 hoje
87  B 0.623  1.646 hoje
88  A 0.098 -1.022 hoje
89  A 0.547 -0.118 hoje
90  A 0.836  0.558 hoje
91  B 0.594 -0.403 hoje
92  A 0.121  0.495 hoje
93  B 0.353 -1.599 hoje
94  B 0.028 -0.379 hoje
95  A 0.273 -0.050 hoje
96  B 0.288 -1.116 hoje
97  B 0.104 -0.106 hoje
98  B 0.824 -1.117 hoje
99  B 0.783  1.131 hoje
100 B 0.414  0.691 hoje

Para solucionar a facilidade de visualização e inspeção de data.frames o {tidyverse} possui uma estrutura de dados chamada tibble:

library(tibble)
convert_df <- as_tibble(df)
str(convert_df)
tibble [100 × 4] (S3: tbl_df/tbl/data.frame)
 $ a  : chr [1:100] "B" "B" "A" "A" ...
 $ x  : num [1:100] 0.475 0.74 0.473 0.439 0.543 ...
 $ y  : num [1:100] -1.46 -1.27 1.04 -1.2 -0.86 ...
 $ dia: chr [1:100] "hoje" "hoje" "hoje" "hoje" ...

Outra vantagem do tibble é que eu consigo criar colunas com base em colunas “passadas”. Por exemplo isso dá um erro com a função data.frame:

df_error <- data.frame(
  a = 1:10,
  b = a + 1
)

Já no tibble eu consigo!

tbl <- tibble(
  a = 1:10,
  b = a + 1
)
tbl_complexa <- tibble(
  idade_ano = rnorm(100, mean = 30, sd = 10),
  altura_cm = rnorm(100, mean = 165, sd = 10),
  peso_kg = rnorm(100, mean = 70, sd = 10),
  IMC = peso_kg / (altura_cm ^ 2),
  glicose = rexp(100, rate = IMC / 10)
)
tbl_complexa
# A tibble: 100 x 5
   idade_ano altura_cm peso_kg     IMC glicose
       <dbl>     <dbl>   <dbl>   <dbl>   <dbl>
 1      27.6      172.    87.8 0.00295  4499. 
 2      14.3      180.    77.0 0.00237    67.9
 3      43.0      183.    77.4 0.00231  5989. 
 4      31.2      179.    83.3 0.00261  1677. 
 5      30.4      141.    57.1 0.00289   428. 
 6      18.1      183.    68.2 0.00204   164. 
 7      28.5      169.    61.3 0.00214 12489. 
 8      25.9      170.    60.6 0.00209   192. 
 9      32.2      177.    78.4 0.00250  2546. 
10      24.4      177.    65.3 0.00208    19.2
# … with 90 more rows

Vetores Especiais – factor

factor são fatores, que para “estatísticos” é variáveis qualitativas (veja o caso da ANOVA).

factor é especial pq ele no fundo é um vetor de integer sendo que cada integer é uma categoria diferentes.

vetor_factor <- factor(c("A", "B", "C"))
str(vetor_factor)
 Factor w/ 3 levels "A","B","C": 1 2 3
typeof(vetor_factor)
[1] "integer"
class(vetor_factor)
[1] "factor"
unclass(vetor_factor)
[1] 1 2 3
attr(,"levels")
[1] "A" "B" "C"

Valores Especiais

pacote::funcao()

Às vezes diferentes funções possuem o mesmo nome. Como que resolvemos esse conflito de namespace.

Simples! Nós chamamos a função com pacote::funcao()

Exemplo tibble::as_tibble()

Ambiente

R version 4.1.0 (2021-05-18)
Platform: aarch64-apple-darwin20 (64-bit)
Running under: macOS Big Sur 11.4

Matrix products: default
BLAS:   /Library/Frameworks/R.framework/Versions/4.1-arm64/Resources/lib/libRblas.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/4.1-arm64/Resources/lib/libRlapack.dylib

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods  
[7] base     

other attached packages:
[1] tibble_3.1.2

loaded via a namespace (and not attached):
 [1] rstudioapi_0.13   knitr_1.33        magrittr_2.0.1   
 [4] downlit_0.2.1     R6_2.5.0          ragg_1.1.3       
 [7] rlang_0.4.11      fansi_0.5.0       stringr_1.4.0    
[10] highr_0.9         tools_4.1.0       xfun_0.24        
[13] png_0.1-7         utf8_1.2.1        cli_3.0.0        
[16] jquerylib_0.1.4   htmltools_0.5.1.1 systemfonts_1.0.2
[19] ellipsis_0.3.2    yaml_2.2.1        digest_0.6.27    
[22] lifecycle_1.0.0   crayon_1.4.1      textshaping_0.3.5
[25] sass_0.4.0        vctrs_0.3.8       distill_1.2      
[28] glue_1.4.2        evaluate_0.14     rmarkdown_2.9    
[31] stringi_1.6.2     pillar_1.6.1      compiler_4.1.0   
[34] bslib_0.2.5.1     jsonlite_1.7.2    pkgconfig_2.0.3  

Corrections

If you see mistakes or want to suggest changes, please create an issue on the source repository.

Reuse

Text and figures are licensed under Creative Commons Attribution CC BY-SA 4.0. Source code is available at https://github.com/storopoli/Linguagem-R, unless otherwise noted. The figures that have been reused from other sources don't fall under this license and can be recognized by a note in their caption: "Figure from ...".

Citation

For attribution, please cite this work as

Storopoli (2021, April 5). Linguagem R: O que é R?. Retrieved from https://storopoli.io/Linguagem-R/1-O_que_e_R.html

BibTeX citation

@misc{storopoli2021oqueeR,
  author = {Storopoli, Jose},
  title = {Linguagem R: O que é R?},
  url = {https://storopoli.io/Linguagem-R/1-O_que_e_R.html},
  year = {2021}
}