Tipos de Varíaveis e Estrutura de Dados
Bem vindos à disciplina!
Vamos usar todo o universo do {tidyverse}
!
dplyr
e manipulação de dadosggplot2
e visualização de dadospurrr
e furrr
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.
numeric
integer
double
logical
character
typeof(1L)
[1] "integer"
typeof(1.0)
[1] "double"
typeof(TRUE)
[1] "logical"
typeof("Oi!")
[1] "character"
is.numeric(1)
[1] TRUE
c(...)
matrix()
array()
list(...)
data.frame(...)
ou tibble(...)
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. Exx <- valor
(similar aox := valor
). Inclusivealt
+-
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"
[1] "list"
vetor_coerce <- c("Oi!", TRUE, 1L)
vetor_coerce
[1] "Oi!" "TRUE" "1"
typeof(vetor_coerce)
[1] "character"
OBS: Named List
List of 3
$ character: chr "Oi!"
$ logical : logi TRUE
$ integer : int 1
dim()
length()
lista[1]
- retornará sempre uma list
lista[[1]]
- retornará sempre um elementolista$1
atalho para lista[["1"]]
lista$nome
- atalho para lista[["nome"]]
lista["nome"]
- retonará sempre uma list
lista[["nome"]]
- retornará sempre uma list
lista[1:30]
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.frame
s o {tidyverse}
possui uma estrutura de dados chamada tibble
:
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
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.
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"
integer
, logical
e character
: apenas um — NA
double
: quatro — NA
, NaN
, Inf
e -Inf
NA
- logical
NA_integer_
- integer
NA_real_
- double
NA_character_
- character
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()
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
If you see mistakes or want to suggest changes, please create an issue on the source repository.
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 ...".
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} }