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   A 0.4281593310  0.269978231 hoje
2   B 0.4868348911  0.095304228 hoje
3   A 0.0820855715 -0.481754067 hoje
4   B 0.1115638788 -0.055112687 hoje
5   B 0.3120309373  0.080680295 hoje
6   B 0.1559161441 -0.856900615 hoje
7   B 0.9250782428 -1.219728582 hoje
8   A 0.5375251151 -0.469061147 hoje
9   A 0.9710417085  0.105590612 hoje
10  A 0.1825689489 -0.252633500 hoje
11  B 0.8158685113  0.987786498 hoje
12  B 0.8076367218 -1.764724579 hoje
13  A 0.0215901232  0.147655350 hoje
14  B 0.9049002680 -0.406698762 hoje
15  A 0.5065202438 -1.011156177 hoje
16  B 0.9890767601 -0.881097218 hoje
17  B 0.9029677201 -0.796301865 hoje
18  B 0.0389202889  0.446744319 hoje
19  B 0.2675222848 -1.722809258 hoje
20  B 0.3385979417 -0.137887757 hoje
21  A 0.7043328446  0.109971427 hoje
22  A 0.0812420761  0.342436066 hoje
23  A 0.5050319710 -0.524781137 hoje
24  A 0.0055027339 -0.605144386 hoje
25  A 0.5307187303  0.189756074 hoje
26  B 0.4540547624  2.695700727 hoje
27  B 0.3238999210 -1.450719399 hoje
28  B 0.9441079567  0.685578988 hoje
29  A 0.1721155988  1.203063446 hoje
30  A 0.6548470221  1.836115260 hoje
31  B 0.7591338588 -0.216659942 hoje
32  A 0.6003661626 -0.107474283 hoje
33  A 0.8903045510  0.865224557 hoje
34  A 0.2108174691 -0.399176945 hoje
35  A 0.3444550368 -0.034249384 hoje
36  A 0.8269297550  1.027778396 hoje
37  A 0.6462185415 -0.513229805 hoje
38  B 0.0557410994  0.242046820 hoje
39  B 0.4327699824  0.536836541 hoje
40  A 0.3903368728 -2.780629274 hoje
41  A 0.9936964933 -0.168371936 hoje
42  B 0.0942324006  0.142131995 hoje
43  A 0.2220998409 -1.902909550 hoje
44  A 0.1657842193 -0.379779597 hoje
45  B 0.9074458501  0.650023169 hoje
46  B 0.9209475338  1.294418126 hoje
47  A 0.3884519869  1.387078425 hoje
48  B 0.1147099726  1.382555289 hoje
49  A 0.2213811132 -0.266496800 hoje
50  B 0.2811411056 -1.390361264 hoje
51  A 0.1652040214  0.358929156 hoje
52  B 0.9750492380  0.291513490 hoje
53  A 0.2308478188 -0.640951317 hoje
54  B 0.1566889770  0.534241389 hoje
55  A 0.3575788017  0.191309329 hoje
56  A 0.1447510323 -1.935419828 hoje
57  A 0.0179871691  0.289963956 hoje
58  B 0.2447288262 -0.217574570 hoje
59  A 0.1486422189 -0.282944621 hoje
60  B 0.8791642324 -1.378434160 hoje
61  B 0.4138095400  1.794416366 hoje
62  A 0.9314968348  0.357231562 hoje
63  A 0.2441937090  0.852516418 hoje
64  B 0.4878146139 -0.306324773 hoje
65  A 0.0416739325 -1.247352661 hoje
66  A 0.2269596576  0.632282054 hoje
67  B 0.1859573806 -0.670737727 hoje
68  B 0.6532306606 -0.918216119 hoje
69  B 0.9497359416  0.189061862 hoje
70  B 0.9849440183 -0.006510629 hoje
71  B 0.6680205881 -0.522710828 hoje
72  B 0.2329548134  0.372391690 hoje
73  A 0.2203577948  1.654717620 hoje
74  B 0.4271905620 -1.573702940 hoje
75  A 0.3272917927 -1.662817857 hoje
76  A 0.5446289470  1.169363720 hoje
77  B 0.5443003636 -0.080021946 hoje
78  B 0.4866502171 -0.091718992 hoje
79  B 0.8194582539  0.791315830 hoje
80  A 0.2731000239  0.011709433 hoje
81  A 0.9281988938 -2.035127908 hoje
82  B 0.3261438510  0.997379451 hoje
83  A 0.0008921006  0.597160581 hoje
84  A 0.0867166396 -0.855526273 hoje
85  A 0.1440573074  0.719976744 hoje
86  B 0.1551962886  2.164480296 hoje
87  A 0.2705750179  0.706043565 hoje
88  B 0.3824789040  0.624833036 hoje
89  B 0.6541009913 -0.306490741 hoje
90  B 0.5896097419  0.919150593 hoje
91  B 0.4150985889 -0.245577928 hoje
92  A 0.6723064925  0.864896557 hoje
93  B 0.7361554641  2.097069247 hoje
94  B 0.6913003095 -0.118602748 hoje
95  A 0.1250859718  0.803666940 hoje
96  A 0.0204824726 -0.042559470 hoje
97  B 0.6477508487 -0.832276906 hoje
98  A 0.5620869414 -0.443712734 hoje
99  A 0.4697715018 -0.169504831 hoje
100 B 0.8700048304  1.603792082 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] "A" "B" "A" "B" ...
 $ x  : num [1:100] 0.4282 0.4868 0.0821 0.1116 0.312 ...
 $ y  : num [1:100] 0.27 0.0953 -0.4818 -0.0551 0.0807 ...
 $ 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 × 5
   idade_ano altura_cm peso_kg     IMC glicose
       <dbl>     <dbl>   <dbl>   <dbl>   <dbl>
 1      21.3      155.    66.2 0.00274   5356.
 2      48.4      173.    70.8 0.00238    447.
 3      42.1      170.    75.4 0.00262   1201.
 4      27.7      166.    61.8 0.00225    524.
 5      25.0      169.    66.6 0.00233   1844.
 6      42.6      167.    66.5 0.00239   8533.
 7      23.7      166.    63.1 0.00229   9918.
 8      31.4      165.    63.9 0.00234    741.
 9      24.4      152.    66.9 0.00291   3008.
10      33.8      175.    75.0 0.00244   2575.
# … 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.2.2 (2022-10-31)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 22.04.1 LTS

Matrix products: default
BLAS:   /usr/lib/x86_64-linux-gnu/openblas-pthread/libblas.so.3
LAPACK: /usr/lib/x86_64-linux-gnu/openblas-pthread/libopenblasp-r0.3.20.so

locale:
 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C              
 [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8    
 [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8   
 [7] LC_PAPER=en_US.UTF-8       LC_NAME=C                 
 [9] LC_ADDRESS=C               LC_TELEPHONE=C            
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       

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

other attached packages:
[1] tibble_3.1.8

loaded via a namespace (and not attached):
 [1] rstudioapi_0.14 knitr_1.42      magrittr_2.0.3  downlit_0.4.2  
 [5] R6_2.5.1        rlang_1.0.6     fastmap_1.1.0   fansi_1.0.4    
 [9] highr_0.10      tools_4.2.2     xfun_0.37       png_0.1-8      
[13] utf8_1.2.3      cli_3.6.0       jquerylib_0.1.4 withr_2.5.0    
[17] htmltools_0.5.4 yaml_2.3.7      digest_0.6.31   lifecycle_1.0.3
[21] sass_0.4.5      vctrs_0.5.2     distill_1.5     memoise_2.0.1  
[25] glue_1.6.2      cachem_1.0.6    evaluate_0.20   rmarkdown_2.20 
[29] compiler_4.2.2  bslib_0.4.2     pillar_1.8.1    jsonlite_1.8.4 
[33] 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}
}