RRR, também conhecida como GNU S, é uma linguagem e um
ambiente para computação estatística e gráficos. R
implementa um dialeto da linguagem S, desenvolvida pelos laboratórios
AT&T Bell. R é um software colaborativo, gratuito e de
código aberto.
R é uma linguagem de programação completa e pode ser
baixada livremente em https://www.R-project.org. Há implementações para
Windows, Unix/Linux, MacOS, etc. Pode-se também baixar o código-fonte de
R.
As funcionalidades do R podem ser extendidas através dos
diversos pacotes desenvolvidos com os mais diferentes propósitos
(regressão beta, genética, redes neurais, modelagem hierárquica, etc.),
ou através de implementações desenvolvidas pelo próprio usuário.
R é uma linguagem orientada a objetos e sua sintaxe é
semelhante a Python e Julia.
RHá uma variedade grande de livros sobre a linguagem R.
Os livros abaixo podem ser usados para consultas:
O Departamento de Estatística mantém um projeto de extensão que
produz materiais e oferece cursos sobre análise estatística utilizando
R. O material pode ser encontrado no instagram @estatisticalivre,
no canal
do Youtube e no agregador.
R em seu computadorR pode ser baixada libremente em https://www.R-project.org, seguindo a sequência de
cliques CRAN, link da localidade, link para o instalador de
acordo com o sistema operacional.
Um link direto para a última versão disponível de R para
os sistemas operacionais Windows, MacOS e Linux pode ser acessado aqui.
RR, no windows, se apresenta como na imagem abaixo.
RGui no sistema operacional
WindowsNos sistemas operacionais MacOS e Linux, a interface de
R com o usuário é feita através do terminal.
R no LinuxUma melhor experiência com a linguagem R pode ser obtida
utilizando-se outras plataformas de interface com o usuário. O RStudio é a interface
mais utilizada por usuários de diversas áreas.
Para além de ser uma plataforma de interface entre R e o
usuário, RStudio é uma empresa que oferece serviços de
treinamento e suporte em linguagem R e na plataforma
RStudio. Diversas bibliotecas de funções de R
foram desenvolvidas pela RStudio, dentre as quais, uma
“meta-biblioteca” chamada tidyverse, que reúne diversas
bibliotecas com diferentes propósitos relacionadas à área de ciência de
dados, constituindo um dialeto próprio da linguagem R.
Recentemente, a RStudio iniciou uma série de mudanças e
a partir de outubro de 2022 passará se se chamar Posit. As mudanças, contudo,
não modificam (pelo menos no curto prazo) a utilização do
RStudio.
RStudioUm link direto para a última versão disponível do
RStudio para os sistemas operacionais Windows, MacOS e
Linux pode ser acessado aqui.
A sequência de instalação deve ser a seguinte:
Rde acordo com o seu sistema operacional;RStudio de acordo com o seu sistema
operacional.Esse link
leva para um video no Youtube com instruções simples de como instalar
R e RStudio no sistema operacional
Windows.
No sistema operacional Linux, o RStudio se apresenta
como na figura abaixo. A apresentação em outros sistemas operacionais é
muito similar.
.
A utilização mais básica de R é como uma “super
calculadora”:
## [1] 4
## [1] 3
## [1] 15
## [1] 13
## [1] 1.609438
## [1] 1.113943
## [1] 1.113943
## [1] 0.1353353
## [1] 59049
## [1] 3.141593
## [1] 1
## [1] 5.690143
A maneira mais simples de acessar o arquivo de ajuda de uma função é
através do comando ?nome_da_função. Por exemplo,
?lm dá acesso à ajuda relativa à função lm,
que é usada para ajustar modelos de regressão linear.
De modo similar, podemos usar a função help(). Por
exemplo, help(lm) levará ao mesmo resultado que
?lm.
Caso não se conheça o nome da função, pode-se pesquisar um tópico
relacionado utilizando a função help.search(). Por exemplo,
help.search("epidemiology") fará uma busca de funções e
bibliotecas de R relacionadas ao termo
epidemiology.
Objetos em R funcionam como “recipientes” e, como tal,
se prestam à tarefa de armazenamento. Quase tudo em R é
objeto. A atribuição de valores a objetos é feita através de um dos
operadores de atribuição =, <- ou
->.
A chamada a um objeto e feita através de seu identificador.
## [1] 2
## [1] 3
## [1] 4
Identificadores (nomes) de objetos podem ser combinações de letras,
números, ponto (“.”) e “_”, com a restrição de que não comecem por
número. R é”case-sensitive”, isto é, um objeto com
identificador a é diferente de um objeto com identificador
A, por exemplo. Eu recomendo a utilização do formato
snake_case, que separa palavras de letras minúsculas com _. Por
exemplo, peso_em_kg, peso_medio, etc.
Operações com objetos são feitas através de operações entre seus identificadores.
## [1] 9
## [1] 64
## [1] 2
## [1] 0.6931472
## [1] 0.01831564
Os métodos estatísticos, matemáticos e computacionais estão implementadas em funções (functions). O cálculo de medidas diversas é feito através da passagem de argumentos específicos a essas funções.
Para calcular a média de uma vetor \(x =
(2, 3, -1, 5)^\top\), por exemplo, devemos atribuir esses valores
a um vetor através da função c() e, em seguida, calcular a
média através da função mean():
## [1] 2 3 -1 5
## [1] 2.25
Exercício: 5 alunos de estatística têm pesos (em Kg) 70, 62, 55, 82 e 77. Calcule o peso médio desses alunos.
Exercício: Para um aluno com peso 55 Kg e altura 162cm, calcule o IMC.
Uma lista resumida de funções importantes é apresentada a seguir.
| Função | O que retorna |
|---|---|
abs(x) |
o valor absoluto de \(x\) |
log(x,b) |
o logaritmo de \(x\) na base \(b\) |
log2(x) |
o logaritmo de \(x\) na base 2 |
log10(x) |
o logaritmo de \(x\) na base 10 |
log(x) |
o logaritmo natural de \(x\) |
exp(x) |
\(e^x\) |
sin(x) |
o seno de \(x\) |
cos(x) |
o cosseno de \(x\) |
tan(x) |
a tangente de \(x\) |
sinh(x) |
o seno hiperbólico de \(x\) |
cosh(x) |
o cosseno hiperbólico de \(x\) |
tanh(x) |
a tangente hiperbólica de \(x\) |
asin(x) |
o arcoseno de \(x\) |
acos(x) |
o arcocosseno de \(x\) |
atan(x) |
a arcotangente de \(x\) |
asinh(x) |
o arcoseno hiperbólico de \(x\) |
acosh(x) |
o arcocosseno hiperbólico de \(x\) |
atanh(x) |
a arcotangente hiperbólica de \(x\) |
round(x,n) |
o valor de \(x\) arredondado para \(n\) casas decimais |
floor(x) |
o maior inteiro que é menor ou igual a \(x\) |
ceiling(x) |
o menor inteiro que é maior ou igual a \(x\) |
length(x) |
o número de elementos de um vetor numérico \(x\) |
sum(x) |
a soma dos elementos de um vetor numérico \(x\) |
cumsum(x) |
um vetor com a soma acumulada dos elementos de um vetor numérico \(x\) |
prod(x) |
o produto dos elementos de um vetor numérico \(x\) |
cumprod(x) |
um vetor com o produto acumulado dos elementos de um vetor numérico \(x\) |
min(x) |
a valor mínimo de um vetor numérico \(x\) |
max(x) |
a valor máximo de um vetor numérico \(x\) |
mean(x) |
a média dos elementos de um vetor numérico \(x\) |
median(x) |
a mediana dos elementos de um vetor numérico \(x\) |
var(x) |
a variância dos elementos de um vetor numérico \(x\) |
sd(x) |
o desvio-padrão dos elementos de um vetor numérico \(x\) |
A linguagem R está organizada em bibliotecas de funções
(libraries), que ficam disponíveis para o usuário através da
instalação de pacotes (packages). Algumas bibliotecas são
instaladas junto com a instalação básica de R. Outras
precisam ser instaladas pelo usuário. Existem hoje (10/10/2022) 18694
pacotes disponíveis com os mais diversos propósitos que podem ser
instalados em R.
As funções library() e require() podem ser
utilizadas para carregar as funções de uma biblioteca em R.
Para utilizar alguma função da biblioteca MASS, por
exemplo, devemos fazer:
A instalação de uma biblioteca pode ser feita através da função
install.packages(). Por exemplo, para instalar a biblioteca
e1071, podemos fazer:
É interessante utilizar o argumento adicional
dependencies = TRUE para que bibliotecas as quais a que
está sendo instalada depende sejam também instaladas:
Para listar todas as bibliotecas que você tem instaladas, use
installed.packages() e para atualizar todas as bibliotecas
que você tem instaladas, use update.packages(). Para
remover um pacote, utilize a função remove.pacakge().
Objetos com valor único são denominados constantes. Por exemplo:
## [1] 3
## [1] 3.141593
## [1] TRUE
## [1] "Análise Estatística"
Valores ausentes (missing values) são representados por
NA.
Vetores são sequências de valores numéricos, de caracteres ou de
constantes lógicas (TRUE e FALSE). Podemos utilizar a função interna
c() para definir vetores.
## [1] 60 72 57 90 95 72
## [1] "Olá" "alunos" "!"
## [1] TRUE TRUE FALSE TRUE FALSE
c() pode ser usada também para concatenar vetores. Por
exemplo:
## [1] 60 72 57 90 95 72
## [1] 70 82
## [1] 60 72 57 90 95 72 70 82
Além de c(), outras funções criam vetores
(:, seq() e rep()). Por
exemplo:
## [1] 4 5 6 7 8 9 10
## [1] 4 5 6 7 8 9 10
## [1] 4 6 8 10
## [1] 4 6 8 10
seq(4, 10, length = 30) # sequencia iniciando em 4 e indo até 10, com 30 elementos. O tamanho do salto é calculado automaticamente.## [1] 4.000000 4.206897 4.413793 4.620690 4.827586 5.034483 5.241379
## [8] 5.448276 5.655172 5.862069 6.068966 6.275862 6.482759 6.689655
## [15] 6.896552 7.103448 7.310345 7.517241 7.724138 7.931034 8.137931
## [22] 8.344828 8.551724 8.758621 8.965517 9.172414 9.379310 9.586207
## [29] 9.793103 10.000000
## [1] 3 3 3 3 3 3 3 3 3 3
## [1] 7 9 13 7 9 13 7 9 13
## [1] 7 9 9 13 13 13
## [1] 7 7 9 13 13 13 13 13
## [1] 1 1 1 1 1 1 1 2 2 2 2 2 3 3 3
## [1] "A" "A" "B" "C" "C" "C"
## [1] TRUE TRUE TRUE FALSE FALSE TRUE FALSE FALSE FALSE FALSE
Diferentes operações podem ser feitas com vetores, dependendo de seu tipo. Especificamente, com vetores numéricos, podemos proceder operações elemento a elemento, cálculos envolvendo todos os elementos de um vetor e operações entre vetores (algebra vetorial). Considere o vetor a seguir.
A indexação em Rse inicia em 1. Ou seja, o primeiro
elemento de uma vetor x é x[1]. Por
exemplo:
## [1] 60 72 57 90 95 72 85 74 65 91
## [1] 60
## [1] 91
## [1] 60 72 90 95 72 85 74 65 91
## [1] 72 58 90 95
## [1] 72 95 85
Outras operações:
## [1] 10
## [1] TRUE
## [1] FALSE
## [1] TRUE
## [1] FALSE
## [1] FALSE
## [1] 91 65 74 85 72 95 90 58 72 60
## [1] 58 60 65 72 72 74 85 90 91 95
## [1] 95 91 90 85 74 72 72 65 60 58
## [1] 2.0 4.5 1.0 8.0 10.0 4.5 7.0 6.0 3.0 9.0
## [1] 5
## [1] 3
São operações aplicadas a cada elemento do vetor. Por exemplo:
pesos = c(60, 72, 57, 90, 95, 72, 85, 74, 65, 91)
alturas = c(155, 172, 152, 180, 179, 190, 162, 181, 172, 185)
pesos^2## [1] 3600 5184 3249 8100 9025 5184 7225 5476 4225 8281
## [1] 60000 72000 57000 90000 95000 72000 85000 74000 65000 91000
## [1] 0.002497399 0.002433748 0.002467105 0.002777778 0.002964951 0.001994460
## [7] 0.003238836 0.002258783 0.002197134 0.002658875
Geralmente, envolvem o cálculo de medidas estatísticas de um ou mais vetores. Por exemplo:
pesos = c(60, 72, 57, 90, 95, 72, 85, 74, 65, 91)
alturas = c(155, 172, 152, 180, 179, 190, 162, 181, 172, 185)
mean(pesos) # média dos pesos## [1] 76.1
## [1] 172.8
## [1] 13.48621
## [1] 12.77845
## [1] 0.5874935
## [,1]
## [1,] 59549
## [,1]
## [1,] 132412
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
## [1,] 60 72 57 90 95 72 85 74 65 91
Note que a função %*% é usada para multiplicação
matricial.
Fator é o tipo de dado adequado para lidar com variáveis nominais. A
função do R para definir uma variável fator é
factor():
## [1] 3 2 3 0 1 0 1 3 1 3 3 0 3 3 2 0 3 1 2 2 2 0 3 0 1 3 3 3 0 2 0 3 0 2 3 3 2
## [38] 1 0 0 2 2 2 0 1 3 1 1 0 1 2 3 2 2 1 3 0 3 3 1 1 1 1 2 2 2 0 1 0 1 0 0 3 2
## [75] 1 0 2 0 1 1 3 0 3 0 3 0 0 2 1 2 0 2 3 2 1 3 2 2 1 3
## [1] Tipo IV Tipo III Tipo IV Tipo I Tipo II Tipo I Tipo II Tipo IV
## [9] Tipo II Tipo IV Tipo IV Tipo I Tipo IV Tipo IV Tipo III Tipo I
## [17] Tipo IV Tipo II Tipo III Tipo III Tipo III Tipo I Tipo IV Tipo I
## [25] Tipo II Tipo IV Tipo IV Tipo IV Tipo I Tipo III Tipo I Tipo IV
## [33] Tipo I Tipo III Tipo IV Tipo IV Tipo III Tipo II Tipo I Tipo I
## [41] Tipo III Tipo III Tipo III Tipo I Tipo II Tipo IV Tipo II Tipo II
## [49] Tipo I Tipo II Tipo III Tipo IV Tipo III Tipo III Tipo II Tipo IV
## [57] Tipo I Tipo IV Tipo IV Tipo II Tipo II Tipo II Tipo II Tipo III
## [65] Tipo III Tipo III Tipo I Tipo II Tipo I Tipo II Tipo I Tipo I
## [73] Tipo IV Tipo III Tipo II Tipo I Tipo III Tipo I Tipo II Tipo II
## [81] Tipo IV Tipo I Tipo IV Tipo I Tipo IV Tipo I Tipo I Tipo III
## [89] Tipo II Tipo III Tipo I Tipo III Tipo IV Tipo III Tipo II Tipo IV
## [97] Tipo III Tipo III Tipo II Tipo IV
## Levels: Tipo I Tipo II Tipo III Tipo IV
## [1] 1 0 1 0 1 0 1 1 1 1 1 0 1 1 0 0 1 1 0 0 0 0 1 0 1 1 1 1 0 0 0 1 0 0 1 1 0
## [38] 1 0 0 0 0 0 0 1 1 1 1 0 1 0 1 0 0 1 1 0 1 1 1 1 1 1 0 0 0 0 1 0 1 0 0 1 0
## [75] 1 0 0 0 1 1 1 0 1 0 1 0 0 0 1 0 0 0 1 0 1 1 0 0 1 1
## [1] M F M F M F M M M M M F M M F F M M F F F F M F M M M M F F F M F F M M F
## [38] M F F F F F F M M M M F M F M F F M M F M M M M M M F F F F M F M F F M F
## [75] M F F F M M M F M F M F F F M F F F M F M M F F M M
## Levels: F M
uma matriz em matemática é apenas um array bi-dimensional de números.
Em R, a noção de matriz é extendida a elementos de qualquer tipo, então,
dessa forma, você pode ter uma matriz de strings, por exemplo. Uma forma
conveniente de criar matrizes é com a função matrix():
matrix(1:12, nrow=3, byrow=T) # Preenchimento por linhas. Ao definir o número de linhas, o número de colunas é calculado automaticamente.## [,1] [,2] [,3] [,4]
## [1,] 1 2 3 4
## [2,] 5 6 7 8
## [3,] 9 10 11 12
## [,1] [,2] [,3] [,4]
## [1,] 1 4 7 10
## [2,] 2 5 8 11
## [3,] 3 6 9 12
matrix(1:12, ncol=3) # Ao definir o número de colunas, o número de linhas é calculado automaticamente## [,1] [,2] [,3]
## [1,] 1 5 9
## [2,] 2 6 10
## [3,] 3 7 11
## [4,] 4 8 12
## [,1] [,2]
## [1,] 0.1 0.6
## [2,] 0.2 0.7
## [3,] 0.3 0.8
## [4,] 0.4 0.9
## [5,] 0.5 1.0
## [,1] [,2] [,3] [,4]
## [1,] 1 4 7 10
## [2,] 2 5 8 11
## [3,] 3 6 9 12
Para acessar o elemento \((i,j)\) de
uma matrix x, faça x[i,j], exemplo:
## [,1] [,2] [,3]
## [1,] 2 -3 1
## [2,] 4 2 -5
## [3,] -1 0 2
## [1] -5
## [1] 4 2 -5
## [1] 1 -5 2
## [,1] [,2] [,3]
## [1,] 2 -3 1
## [2,] 4 2 -4
## [3,] -1 0 2
Da mesma forma que ocorre com os vetores numéricos, as operações com matrizes numéricas podem ser feitas elemento a elemento ou entre matrizes, sendo que estas últimas devem respeitar as restrições impostas pela matemática. Por exemplo:
## [,1] [,2] [,3]
## [1,] 2 -3 1
## [2,] 4 2 -5
## [3,] -1 0 2
## [,1] [,2] [,3]
## [1,] 1 -3 2
## [2,] -5 1 4
## [3,] 0 -1 2
## [,1] [,2] [,3]
## [1,] 3 -6 3
## [2,] -1 3 -1
## [3,] -1 -1 4
## [,1] [,2] [,3]
## [1,] 1 0 -1
## [2,] 9 1 -9
## [3,] -1 1 0
## [,1] [,2] [,3]
## [1,] 2 9 2
## [2,] -20 2 -20
## [3,] 0 0 4
## [,1] [,2] [,3]
## [1,] 2.0 1 0.50
## [2,] -0.8 2 -1.25
## [3,] -Inf 0 1.00
## [,1] [,2] [,3]
## [1,] 4 9 1
## [2,] 16 4 25
## [3,] 1 0 4
## [,1] [,2] [,3]
## [1,] 2 3 1
## [2,] 4 2 5
## [3,] 1 0 2
## [,1] [,2] [,3]
## [1,] 1.000000 1.732051 1.414214
## [2,] 2.236068 1.000000 2.000000
## [3,] 0.000000 1.000000 1.414214
## [,1] [,2] [,3]
## [1,] 0.2105263 0.3157895 0.6842105
## [2,] -0.1578947 0.2631579 0.7368421
## [3,] 0.1052632 0.1578947 0.8421053
## [,1] [,2] [,3]
## [1,] 17 -10 -6
## [2,] -6 -5 6
## [3,] -1 1 2
## [,1] [,2] [,3]
## [1,] 0.9285714 -0.2142857 0
## [2,] -1.3571429 -1.0714286 1
## [3,] -0.2857143 0.1428571 1
## [,1] [,2] [,3]
## [1,] 2 4 -1
## [2,] -3 2 0
## [3,] 1 -5 2
## [1] 19
É a generalização da ideia de matriz para 3 dimensões. É equivalente
a ter um vetor de matrizes do mesmo tipo e dimensão. A função de R para
arrays é array(). Exemplo:
B = array(NA, dim = c(3, 2, 3)) # Dimensões: linhas x colunas x matrizes
for (i in 1:3) B[,,i] = matrix(rnorm(6), ncol = 2)
B## , , 1
##
## [,1] [,2]
## [1,] 0.2731292 -0.5461908
## [2,] 0.7555251 0.2343620
## [3,] -0.3490184 -0.2978282
##
## , , 2
##
## [,1] [,2]
## [1,] -0.8404761 0.6996756
## [2,] 0.8265104 -1.2615742
## [3,] 1.4836912 0.2982717
##
## , , 3
##
## [,1] [,2]
## [1,] -0.1478071 -0.9205251
## [2,] -0.8889223 -0.5738945
## [3,] 1.0130659 1.1503655
A indexação segue a mesma lógica da indexação de vetores e matrizes. Por exemplo:
## [,1] [,2]
## [1,] 0.2731292 -0.5461908
## [2,] 0.7555251 0.2343620
## [3,] -0.3490184 -0.2978282
## [1] 0.7555251 0.2343620
## [1] -0.5461908 0.2343620 -0.2978282
## [1] 0.2731292
É um conjunto de objetos (possivelmente de tipos e tamanhos
diferentes). É a forma como a maioria das funções em R retorna
resultados. A função de R para listas é list().
Exemplo:
id = 1:10
pesos = c(60, 72, 57, 90, 95, 72, 85, 74, 65, 91)
sexo = c(0, 1, 1, 1, 0, 0, 0, 1, 0, 0)
sexo = factor(sexo, levels = 0:1)
levels(sexo) = c("F", "M")
x = matrix(rnorm(30), 10, 3)
lista1 = list(titulo = "exemplo", ident = id,
peso = pesos, sexo = sexo,
matriz = x)
lista1## $titulo
## [1] "exemplo"
##
## $ident
## [1] 1 2 3 4 5 6 7 8 9 10
##
## $peso
## [1] 60 72 57 90 95 72 85 74 65 91
##
## $sexo
## [1] F M M M F F F M F F
## Levels: F M
##
## $matriz
## [,1] [,2] [,3]
## [1,] 1.14382456 0.44243942 1.6021204
## [2,] -0.23944276 0.45027946 1.0040690
## [3,] -1.08680215 -0.07606216 0.3798957
## [4,] -0.06144699 0.29751322 -0.5655054
## [5,] -0.51669734 -1.19435471 -1.2137781
## [6,] -1.90767369 -1.99687548 -1.3643016
## [7,] 0.10715648 1.38851305 -1.4161330
## [8,] -1.17737519 -0.08248357 -0.2555780
## [9,] 1.74542691 0.39251449 -1.2254260
## [10,] -0.39869853 -1.08276971 0.2138343
Para acessar os elementos da lista usamos o $:
## [1] "exemplo"
## [1] 60 72 57 90 95 72 85 74 65 91
## [1] F M M M F F F M F F
## Levels: F M
## [,1] [,2] [,3]
## [1,] 1.14382456 0.44243942 1.6021204
## [2,] -0.23944276 0.45027946 1.0040690
## [3,] -1.08680215 -0.07606216 0.3798957
## [4,] -0.06144699 0.29751322 -0.5655054
## [5,] -0.51669734 -1.19435471 -1.2137781
## [6,] -1.90767369 -1.99687548 -1.3643016
## [7,] 0.10715648 1.38851305 -1.4161330
## [8,] -1.17737519 -0.08248357 -0.2555780
## [9,] 1.74542691 0.39251449 -1.2254260
## [10,] -0.39869853 -1.08276971 0.2138343
A indexação é feita através de [[]]. Por exemplo, para
acessar o \(i\)-ésimo elemento de uma
lista, faça nomedalista[[i]].
## [1] "exemplo"
## [1] 1 2 3 4 5 6 7 8 9 10
## [1] 60 72 57 90 95 72 85 74 65 91
## [1] F M M M F F F M F F
## Levels: F M
## [,1] [,2] [,3]
## [1,] 1.14382456 0.44243942 1.6021204
## [2,] -0.23944276 0.45027946 1.0040690
## [3,] -1.08680215 -0.07606216 0.3798957
## [4,] -0.06144699 0.29751322 -0.5655054
## [5,] -0.51669734 -1.19435471 -1.2137781
## [6,] -1.90767369 -1.99687548 -1.3643016
## [7,] 0.10715648 1.38851305 -1.4161330
## [8,] -1.17737519 -0.08248357 -0.2555780
## [9,] 1.74542691 0.39251449 -1.2254260
## [10,] -0.39869853 -1.08276971 0.2138343
A função names() retorna os nomes dos objetos de uma
lista.
## [1] "titulo" "ident" "peso" "sexo" "matriz"
Frequentemente estaremos interessados em selecionar observações
segundo algum critério ou “filtrar” observações. Isso pode ser realizado
em R através de indexação condicional com a utilização de
operadores de comparação e operadores lógicos.
Também conhecidos como operadores relacionais, esses operadores
permitem estabelecer a relação entre dois valores de entrada, retornando
um valor lógico TRUE ou FALSE. Os operadores
de comparação em R são:
| Operador | Significado |
|---|---|
== |
igual a |
!= |
diferente de |
< |
menor que |
> |
maior que |
<= |
menor ou igual a |
>= |
maior ou igual a |
%in% |
pertence a |
Exemplos:
## [1] TRUE
## [1] FALSE
## [1] TRUE
## [1] TRUE
## [1] FALSE
## [1] FALSE TRUE TRUE TRUE TRUE
## [1] FALSE TRUE TRUE TRUE TRUE
## [1] FALSE TRUE TRUE FALSE TRUE
## [1] FALSE
## [1] TRUE TRUE FALSE
## [1] FALSE
## [1] TRUE FALSE
Esses operadores combinam multiplas condições relacionais retornando
um valor lógico TRUE ou FALSE. Os operadores
lógicos em R são:
| Operador | Significado |
|---|---|
& |
AND (E) lógico |
| |
OR (OU) lógico |
! |
NOT (NÃO) lógico |
xor |
Exclusive OR (OU Exclusivo) |
As combinações de acordo com cada operador estão descritas na tabela a seguir.
A |
B |
A & B |
A | B |
!A |
!B |
xor(A,B) |
|---|---|---|---|---|---|---|
TRUE |
TRUE |
TRUE |
TRUE |
FALSE |
FALSE |
FALSE |
TRUE |
FALSE |
FALSE |
TRUE |
FALSE |
TRUE |
TRUE |
FALSE |
TRUE |
FALSE |
TRUE |
TRUE |
FALSE |
TRUE |
FALSE |
FALSE |
FALSE |
FALSE |
TRUE |
TRUE |
FALSE |
Exemplos:
## [1] TRUE
## [1] FALSE
## [1] FALSE
## [1] FALSE
## [1] TRUE
## [1] TRUE
## [1] TRUE
## [1] FALSE
## [1] FALSE
## [1] TRUE
## [1] FALSE
## [1] TRUE
## [1] TRUE
## [1] FALSE
Em análise estatística de dados é frequente que os dados sejam armazenados em formato tabular. Alguns conceitos precisam ser introduzidos:
Em R, dados tabulares são armazenados como data
frames. Um data frame pode ser visto como uma matriz que aceita
tipos diferentes de variáveis (numéricas, fatores, lógicas, caracteres,
etc.).
A função em R para criar data frames é
data.frame(). Por exemplo:
id = 1:10
pesos = c(60, 72, 57, 90, 95, 72, 85, 74, 65, 91)
alturas = c(155, 172, 152, 180, 179, 190, 162, 181, 172, 185)
sexo = c(0, 1, 1, 1, 0, 0, 0, 1, 0, 0)
sexo = factor(sexo, levels = 0:1)
levels(sexo) = c("F", "M")
df = data.frame(id = id, peso = pesos, altura = alturas, sexo = sexo)
df## id peso altura sexo
## 1 1 60 155 F
## 2 2 72 172 M
## 3 3 57 152 M
## 4 4 90 180 M
## 5 5 95 179 F
## 6 6 72 190 F
## 7 7 85 162 F
## 8 8 74 181 M
## 9 9 65 172 F
## 10 10 91 185 F
O acesso às colunas de uma data frame é feito de modo similar ao acesso aos abjetos de uma lista. Por exemplo:
## [1] 1 2 3 4 5 6 7 8 9 10
## [1] 60 72 57 90 95 72 85 74 65 91
## [1] 155 172 152 180 179 190 162 181 172 185
## [1] F M M M F F F M F F
## Levels: F M
Ou, equivalentemente:
## [1] 1 2 3 4 5 6 7 8 9 10
## [1] 60 72 57 90 95 72 85 74 65 91
## [1] 155 172 152 180 179 190 162 181 172 185
## [1] F M M M F F F M F F
## Levels: F M
Além disso, indexação similar à utilizada com matrizes também pode ser utilizada com data frames. Por exemplo:
## id peso altura sexo
## 3 3 57 152 M
## [1] 155 172 152 180 179 190 162 181 172 185
## [1] 152
## id peso altura sexo
## 2 2 72 172 M
## 3 3 57 152 M
## 4 4 90 180 M
## 5 5 95 179 F
## peso altura
## 1 60 155
## 2 72 172
## 3 57 152
## 4 90 180
## 5 95 179
## 6 72 190
## 7 85 162
## 8 74 181
## 9 65 172
## 10 91 185
## peso altura
## 2 72 172
## 3 57 152
## 4 90 180
## 5 95 179
A indexação das colunas também pode ser feita utilizando os nomes das variáveis. Por exemplo:
## [1] 60 72 57 90 95 72 85 74 65 91
## peso sexo
## 1 60 F
## 2 72 M
## 3 57 M
## 4 90 M
## 5 95 F
## 6 72 F
## 7 85 F
## 8 74 M
## 9 65 F
## 10 91 F
Frequentemente os dados de um estudo são armazenados no formato
tabular em planilhas ou arquivos de texto. A leitura desses conjuntos de
dados em R depende da forma como os dados estão escritos
nos arquivos. Algumas considerações a serem feitas (dentre muitas
possíveis) são:
R dispõe de diversas funções nativas para leitura de
arquivos de dados armazenados como texto (.txt,
.dat, .csv, .data, etc.). Além
disso, há diversas bibliotecas para leitura de arquivos armazenados em
planilhas do Microsoft Excel (.xlsx) ou oriundos de outros
programas, como o IBM SPSS (.sav), por exemplo.
A função getwd() retorna o diretório de trabalho atual.
Para definir um novo diretório de trabalho usamos a função
setwd(). Por exemplo:
# Em Sistemas operacionais Linux:
# setwd("/home/marcelo/Dropbox/DE-UFPB/disciplinas/PPGMDS/2025-1/ALC/MDSA000019")
# Em Sistemas operacionais Windows:
# setwd("C:\\Users\\marcelo\\Dropbox\\DE-UFPB\\disciplinas\\PPGMDS\\2025-1\\ALC\\MDSA000019")
# Em Sistemas operacionais macOS:
setwd("/Users/marceloferreira/Dropbox/DE-UFPB/disciplinas/PPGMDS/2025-1/ALC/MDSA000019")A função read.table() lê arquivos de texto
(.txt, .dat, .csv,
.data, etc.) com dados escritos no formato tabular e cria
um data frame a partir dele.
read.table(file, header = FALSE, sep = "", quote = "\"'",
dec = ".", numerals = c("allow.loss", "warn.loss", "no.loss"),
row.names, col.names, as.is = !stringsAsFactors,
na.strings = "NA", colClasses = NA, nrows = -1,
skip = 0, check.names = TRUE, fill = !blank.lines.skip,
strip.white = FALSE, blank.lines.skip = TRUE,
comment.char = "#",
allowEscapes = FALSE, flush = FALSE,
stringsAsFactors = FALSE,
fileEncoding = "", encoding = "unknown", text, skipNul = FALSE)Seus principais argumentos são:
file: Arquivo a ser lido. Caso não seja especificado o
caminho completo para o arquivo, este será relativo ao diretório de
trabalho atual. Alternativamente, file pode ser um endereço
da internet (URL);header: Valor lógico indicando se o arquivo contém os
nomes das variáveis na primeira linha. O valor padrão é
header = FALSE;sep: O caracter delimitador de campo. O valor padrão é
sep = "" (“espaço em branco”);dec: O caracter utilizado como separador decimal. O
valor padrão é dec = ".";na.strings: Um vetor de strings que devem ser
interpretadas como valores ausentes (NA). O valor padrão é
na.strings = "NA";stringsAsFactors: valor lógico indicando se vetores de
caracteres devem ser convertidos para fatores.Para uma descrição completa de todos os argumentos de
read.table(), faça ?read.table.
Por exemplo, vamos fazer a leitura do arquivo
heart_disease_a.txt, disponível no SIGAA. O arquivo tem
seus campos delimitados por vírgula, possui cabeçalho na primeira linha,
utiliza ponto como separador decimal e tem os valores ausentes
representados por NA.
heart_disease_a.txtSe o arquivo estiver salvo no diretório de trabalho atual, para lê-lo
e armazená-lo em um objeto identificado por df, basta
fazer:
Se o arquivo não estiver salvo no diretório de trabalho atual, para
lê-lo e armazená-lo em um objeto identificado por df é
necessário especificar o caminho completo:
df = read.table("/home/marcelo/Dropbox/DE-UFPB/disciplinas/2022-1/MDSA000019/heart_disease_a.txt", header = TRUE, sep = ",")Para visualizar as primeiras 10 linhas do conjunto de dados,
utilizamos a função head(). Por exemplo:
## sex age current_smoker cigs_per_day bp_meds prevalent_stroke prevalent_hyp
## 1 1 39 0 0 0 0 0
## 2 0 46 0 0 0 0 0
## 3 1 48 1 20 0 0 0
## 4 0 61 1 30 0 0 1
## 5 0 46 1 23 0 0 0
## 6 0 43 0 0 0 0 1
## 7 0 63 0 0 0 0 0
## 8 0 45 1 20 0 0 0
## 9 1 52 0 0 0 0 1
## 10 1 43 1 30 0 0 1
## diabetes tot_chol sys_bp dia_bp bmi heart_rate glucose ten_year_chd
## 1 0 195 106.0 70 26.97 80 77 0
## 2 0 250 121.0 81 28.73 95 76 0
## 3 0 245 127.5 80 25.34 75 70 0
## 4 0 225 150.0 95 28.58 65 103 1
## 5 0 285 130.0 84 23.10 85 85 0
## 6 0 228 180.0 110 30.30 77 99 0
## 7 0 205 138.0 71 33.11 60 85 1
## 8 0 313 100.0 71 21.68 79 78 0
## 9 0 260 141.5 89 26.36 76 79 0
## 10 0 225 162.0 107 23.61 93 88 0
A função dim() retorna o número de linhas (tamanho da
amostra) e de colunas (número de variáveis) do conjunto de dados:
## [1] 4238 15
Este conjunto de dados é referente a um estudo com 4238 indivíduos sobre doenças cardiovasculares na cidade de Framingham, Massachusetts, EUA. As 15 variáveis disponíveis são:
sex: sexo (0 - Feminino, 1 - Masculino);age: idade (a idade dos indivíduos, em anos);current_smoker: fumante (0 - Não, 1 - Sim);cigs_per_day: número de cigarros por dia;bp_meds: uso de medicamentos para hipertensão (0 - Não,
1 - Sim);prevalent_stroke: acidente vascular cerebral (AVC)
prévio (0 - Não, 1 - Sim);prevalent_hyp: hipertensão (0 - Não, 1 - Sim);diabetes: diabetes (0 - Não, 1 - Sim);tot_chol: nível de colesterol total;sys_bp: pressão sistólica;dia_bp: pressão diastólica;bmi: índice de massa corporal (imc);heart_rate: frequência cardíaca;glucose: nível de glicose;ten_year_chd: risco de doença cardíaca em um período de
10 anos (0 - Não, 1 - Sim).A função read.csv() é utilizada para ler arquivos com
extensão .csv. Sua sintaxe é similar à de
read.table() com a diferença de que, por padrão, temos
header = TRUE e sep = ",".
read.csv(file, header = TRUE, sep = ",", quote = "\"",
dec = ".", fill = TRUE, comment.char = "", ...)Outras funções úteis para leitura de arquivos texto são
read.csv2(), read.delim() e
read.delim2().
Exercício: Utilize as funções
read.table() e read.csv() para ler os arquivos
heart_disease_b.txt e heart_disease_c.csv
disponíveis no SIGAA.
Exercício: Estude e entenda o funcionamento das
funções read.csv2(), read.delim() e
read.delim2().
A função write.table() é utilizada para escrever um
conjunto de dados como um arquivo texto.
write.table(x, file = "", append = FALSE, quote = TRUE, sep = " ",
eol = "\n", na = "NA", dec = ".", row.names = TRUE,
col.names = TRUE, qmethod = c("escape", "double"),
fileEncoding = "")Por exemplo, para escrever o objeto df em um arquivo de
texto com o nome heart_disease_d.txt, em que os campos são
delimitados por ";", podemos fazer:
A função write.csv() tem sintaxe semelhante à de
write.table(), mas usa, por padrão, vírgula como
delimitador de campo.
Existem diversas bibliotecas de R para leitura de
arquivos com diferentes extensões como, por exemplo, .xlsx
(Microsoft Excel), .sav (IBM SPSS), dentre outras. Contudo,
arquivos com quaisquer extensões podem ser convertidos em arquivos de
texto e lidos em R utilizando suas funções nativas.
É recomendável agrupar e organizar seu código de R em
scripts. Scripts de R são basicamente
arquivos de texto com a extensão .r. Para criar um novo
script, clique no menu File, selecione
New File e, em seguida, R script.
Alternativamente, use o atalho do teclado Shift+Ctrl+N em
sistemas operacionais Linux ou Microsoft Windows, ou
Shift+Cmd+N em sistemas operacionais macOS.
Para executar a linha em que está posicionado o cursor no
script ou trecho de código selecionado, faça
Ctrl+Enter em sistemas operacionais Linux ou Microsoft
Windows, ou Cmd+Enter em sistemas operacionais macOS. Ao
executar uma linha ou trecho de código selecionado o cursor será movido
para a próxima em que existe código válido. A combinação
Shift+Ctrl+S em sistemas operacionais Linux ou Microsoft
Windows, ou Shift+Cmd+S em sistemas operacionais macOS,
executa todo o script em um único passo.