Capítulo 1 Introdução ao programa R
O R é um ambiente de análise de dados, cálculos matemáticos, análises estatísticas e apresentação gráfica. É um programa livre e de código aberto com aplicações nas mais diversas áreas das ciências. Para informações sobre o programa acesse a página oficial do R https://www.r-project.org, onde existe uma extensa variedade de informações, apostilas e área de download para as plataformas Linux, Windows e MacOS. Outras fontes de informação são o R-blogers https://www.r-bloggers.com, o stackoverflow, towards data science ou ainda inúmeras páginas, tutoriais, videos e apostilas que podem ser encontrados em uma busca no Google. Neste capítulo faremos uma breve introdução ao R e, no capítulo seguinte, abordaremos tópicos sobre maniupulação e visualização de dados.
1.1 Instalação do R
O R pode ser instalado a partir do site oficial CRAN. A instalação em ambiente Windows pode ser obtida no link Download R for Windows --> base
onde você irá encontrar a versão mais atual disponível para seu sistema. Em ambiente Mac OS X a instalação pode ser feita a partir do link Download R for (Mac) OS X
buscando pelo pacote .pkg
. Para ambiente Linux, entre no link Download R for Linux
e escolha sua plataforma (Ubuntu, Debian, Fedora, etc.). Nela você poderá obter as instruções de instalação.
1.2 Interface de desenvolvimento (IDE)
Uma IDE (Integrated Development Environment) é um ambiente de desenvolvimento integrado, que faciliatm o uso de linguagens de programação. Existe uma variedade de IDE’s para programação em R. Você pode pesquisar por estas opções na internet e buscar por aquela que melhor atenda suas necessidades. Resalto duas opções utilizadas no contexto de análise de dados, estatística e ciência de dados: o RStudio e o Jupyter Notebook.
O RStudio é um ambiente intregrado ao R, embora também seja utilizado para desenvolvimento em outras linguagens de programação. Por ter sido desenvivido primariamente para desenvolvimento em R, ofecere uma grande variedade de opções, desde a simples visualização de dados até a instalação e manutenção de pacotes. Esta será a interface que iremos utilizar para dar sequência a este material.
A instalação do RStudio pode ser feita em ambiente Windos, MAC OS X e Linux. A instalação em Windows e MAC OS X seguem o caminho tradicional de instalação de programas nestes ambientes. Em Linux você poderá encontrar uma variedade de tutoriais para a sua plataforma.
A vantagem do Jupyter Notebook é sua estrutura simples que facilita a curva de aprendizado. Atualmente (2021-05-18) é mais utilizado para desenvolvimento e análise de dados em Python, porém você poderá encontrar facilmente tutoriais para configuração do ambiente em R.
1.3 O R para cálculos aritméticos
Vamos iniciar nossa introdução ao R com seu uso mais simples, um ambiente para cálculos aritméticos. Como você verá, o R usa os operadores matemáticos de subtração (-
), adição (+
), multiplicação (*
), divisão (/
) e potenciação (^
) do modo análogo a outros softwares.
2 + 4
## [1] 6
2 * 4
## [1] 8
2 - 4
## [1] -2
2^4
## [1] 16
Além destes, temos operadores para extrairmos a parte inteira (%%
) e o resto (%/%
) de uma divisão.
13%/%2
## [1] 6
13%%2
## [1] 1
O uso de parênteses também permite o controle das operações matemáticas seguindo as prioridades conhecidas nestas operações. Por exemplo, a expressão:
5 * (9 + 2)
## [1] 55
é diferente de:
5 * 9 + 2
## [1] 47
Assim como a expressão:
3 + 4)^2 (
## [1] 49
é diferente de:
3 + 4^2
## [1] 19
Existem também funções aritméticas comuns como \(log(x)\), \(\sqrt(x)\), \(\sin(x)\), o número \(\pi\), etc.
log(100)
## [1] 4.60517
log10(100)
## [1] 2
log(100, base = 2)
## [1] 6.643856
sqrt(36)
## [1] 6
pi
## [1] 3.141593
sin(0.5 * pi)
## [1] 1
1.4 Atribuição de valores
O R se estrutura por meio de objetos. Ao atribuir um valor qualquer a uma variável, esta se torna um objeto que fica disponível na memória. Podemos, por exemplo, criar uma variável x
e atribuir o valor \(2\) a esta variável.
<- 2
x x
## [1] 2
Após atribuir um valor a uma variável, esta fica disponível na memória da seção atual, de modo que podemos utilizá-la em cálculos subsequentes.
<- x + 10
y y
## [1] 12
Ao atribuir outro valor à mesma variável, o valor inicial é substituído:
<- 5
x <- x + 10
y y
## [1] 15
O R diferencia caracteres minúsculos de MAIÚSCULOS. Portanto,
<- sqrt(49)
a a
## [1] 7
<- sqrt(81)
A A
## [1] 9
1.5 Estruturas de dados
Os objetos em R podem ser de dos seguintes tipos: vetores (numéricos, alfanuméricos ou fatores), matrizes (numéricas ou alfanumétricas), data frames (estrutura bidimensional que pode combinar nas suas colunas vetores numéricos, alfanuméricos ou fatores) ou listas (que pode combinar em sua estrutura, todos os objetos descritos acima) e funções (comandos que realizam operações de transformação de objetos).
1.5.1 Vetores numéricos
Os objetos podem guardar mais de um único valor. A função concatenar c()
pode ser utilizada para criar um vetor com múltiplos valores. Dizemos que cada valor individual é uma entrada.
<- c(4, 3.0, 5, 9, 10)
x x
## [1] 4 3 5 9 10
Podemos utilizar estes em nossas operações.
<- x * 2
y y
## [1] 8 6 10 18 20
Note que na operação acima, cada entrada foi multiplicada por \(2\).
Podemos ainda acessar e modificar entradas individuais. Por exemplo, o objeto y
criado acima tem 5 elementos. O segundo elemento pode ser acessado com o comando:
2] y[
## [1] 6
E alterado com o comando:
2] <- 300
y[ y
## [1] 8 300 10 18 20
Se quisermos excluir o quarto elemento de y
e gravar o resultado em um novo objeto z
fazemos:
<- y[-4]
z z
## [1] 8 300 10 20
Obs: Veja que o quarto elemento, 18, foi excluído.
Podemos obter a informação sobre o número de elementro do vetor. O vetor y
tem tamanho igual a 5, enquanto o vetor z
tem 4 elementos.
length(y)
## [1] 5
length(z)
## [1] 4
1.5.1.1 Sequências regulares e repetições
Podemos criar sequencias regulares.
2:10
## [1] 2 3 4 5 6 7 8 9 10
seq(2, 10, by = 2)
## [1] 2 4 6 8 10
seq(2, 10, length = 4)
## [1] 2.000000 4.666667 7.333333 10.000000
seq(2, 10, length = 10)
## [1] 2.000000 2.888889 3.777778 4.666667 5.555556 6.444444 7.333333
## [8] 8.222222 9.111111 10.000000
E repetições de valores e vetores.
rep(4, times = 6)
## [1] 4 4 4 4 4 4
rep(c(2, 5), times = 3)
## [1] 2 5 2 5 2 5
rep(c(2, 5), each = 3)
## [1] 2 2 2 5 5 5
Os resultados destas sequências podem ser guardadas em um objeto para utilização subsequente.
<- seq(2, 10, by = 2)
a a
## [1] 2 4 6 8 10
<- seq(10, 2, by = -2)
b b
## [1] 10 8 6 4 2
<- a + b
c c
## [1] 12 12 12 12 12
1.5.2 Vetores alfanuméricos
São vetortes em que cada entrada é um caracter alfanumerico.
= c("Deuterodon iguape",
especie "Characidium japuhybense",
"Trichomycterus zonatus")
especie
## [1] "Deuterodon iguape" "Characidium japuhybense"
## [3] "Trichomycterus zonatus"
Existe uma variedade de funções para lidarmos e manipularmos vetores alfanuméricos.
A função sort()
por exemplo, se aplicada a um vetor numérico é utilizada para ordená-lo de forma crescente:
= c(5,2,15,12)
a a
## [1] 5 2 15 12
sort(a)
## [1] 2 5 12 15
ou decrescente:
sort(a, decreasing = T)
## [1] 15 12 5 2
Se aplicada a um vetor alfanumerico esta função ordena o vetor em ordem alfabética:
sort(especie, decreasing = FALSE)
## [1] "Characidium japuhybense" "Deuterodon iguape"
## [3] "Trichomycterus zonatus"
sort(especie, decreasing = TRUE)
## [1] "Trichomycterus zonatus" "Deuterodon iguape"
## [3] "Characidium japuhybense"
1.5.3 Unindo vetores: comando paste
Suponha que desejamos unir dois vetores alfanuméricos
<- c("Experimento")
x1 <- c("A", "B", "C")
x2 <- paste(x1, x2, sep = "_") x3
O mesmo resultado pode ser obtido de forma mais concisa com o comando:
<- paste("Experimento", LETTERS[1:3], sep = "_")
x4 x4
## [1] "Experimento_A" "Experimento_B" "Experimento_C"
1.5.4 Fatores
Fatores são como vetores alfanuméricos, porém com um atributo adicional. Fatores são compostos por diferentes níveis. Por exemplo, podemos criar o objeto dosagem
com o comando:
<- c("Alta", "Alta", "Alta",
dosagem "Media", "Media", "Media",
"Baixa", "Baixa", "Baixa")
dosagem
## [1] "Alta" "Alta" "Alta" "Media" "Media" "Media" "Baixa" "Baixa" "Baixa"
No exemplo acima, o R não reconhece as palavras Alta
, Media
e Baixa
como diferentes níveis. Para isto devemos fazer:
<- factor(dosagem)
dosagem dosagem
## [1] Alta Alta Alta Media Media Media Baixa Baixa Baixa
## Levels: Alta Baixa Media
O objeto dosagem agora é um fator com 3 níveis.
levels(dosagem)
## [1] "Alta" "Baixa" "Media"
nlevels(dosagem)
## [1] 3
levels(dosagem)[2]
## [1] "Baixa"
Note entretanto que os níveis foram reconhecidos em ordem alfabética. Se quisermos ordenar este níveis de outro modo fazemos:
<- factor(dosagem, ordered = T,
dosagem levels = c("Baixa", "Media", "Alta"))
dosagem
## [1] Alta Alta Alta Media Media Media Baixa Baixa Baixa
## Levels: Baixa < Media < Alta
Como veremos a frente, esta operação pode facilitar a visualização gráfica de fatores ordenados.
1.5.5 Matrizes
Matrizes são objetos compostos por linhas e colunas. No R, uma matriz pode ser construída inicialmente criando um vetor numérico:
<- c(21,26,5,18,17,28,20,15,13,14,27,22)
a a
## [1] 21 26 5 18 17 28 20 15 13 14 27 22
e, em seguida, organizando este vetor em uma matriz com um número de linhas e colunas compatíveis com o tamanho do vetor. No exemplo acima temos um vetor de comprimento 12. Deste modo, este vetor pode ser organizado por exemplo, em uma matriz de \(3\) linhas e \(4\) colunas, utilizando o comando.
<- matrix(a, nrow = 3, ncol = 4)
x x
## [,1] [,2] [,3] [,4]
## [1,] 21 18 20 14
## [2,] 26 17 15 27
## [3,] 5 28 13 22
Note que os elementos foram adicionados um por vez de coluna em coluna. Se quisermos preencher a matriz por linhas adicionamos ao comando, o argumento byrow = TRUE
.
<- matrix(a, nrow = 3, ncol = 4, byrow = TRUE)
x x
## [,1] [,2] [,3] [,4]
## [1,] 21 26 5 18
## [2,] 17 28 20 15
## [3,] 13 14 27 22
Os elementos de uma matriz podem ser acessados indicando sua posição na linha e na coluna. Por exemplo, o elemento da segunda linha e terceira coluna de x
pode ser acessados pelo comando:
2, 3] x[
## [1] 20
De modo análogo, a segunda linha pode ser acessada por:
2, ] x[
## [1] 17 28 20 15
E a coluna 4 por:
4] x[,
## [1] 18 15 22
Assim como fizemos com os vetores, podemos acessar e modificar valores individuais em matrizes. Por exemplo, se quisermos alterar o elemento segunda linha e terceira coluna de x
por 1000 fazemos:
2, 3] <- 1000
x[ x
## [,1] [,2] [,3] [,4]
## [1,] 21 26 5 18
## [2,] 17 28 1000 15
## [3,] 13 14 27 22
Também podemos excluir linhas e colunas de uma matriz.
-2,] x[
## [,1] [,2] [,3] [,4]
## [1,] 21 26 5 18
## [2,] 13 14 27 22
-3] x[,
## [,1] [,2] [,3]
## [1,] 21 26 18
## [2,] 17 28 15
## [3,] 13 14 22
Note que, acima, não salvamos os resultados da exclusão das linhas e colunas de x
em nenhum objeto, de modo que x
continua inalterado.
x
## [,1] [,2] [,3] [,4]
## [1,] 21 26 5 18
## [2,] 17 28 1000 15
## [3,] 13 14 27 22
Podemos criar matrizes unindo vetores de tamanho iguais em linhas ou colunas.
<- 3:12
x <- 12:3
y rbind(x, y)
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
## x 3 4 5 6 7 8 9 10 11 12
## y 12 11 10 9 8 7 6 5 4 3
cbind(x, y)
## x y
## [1,] 3 12
## [2,] 4 11
## [3,] 5 10
## [4,] 6 9
## [5,] 7 8
## [6,] 8 7
## [7,] 9 6
## [8,] 10 5
## [9,] 11 4
## [10,] 12 3
Eventualmente, se desejarmos atribuir nomes às linhas e às colunas de uma matriz, podemos fazê-lo por meio das funções rownames()
e colnames()
respectivamente:
<- matrix(1:12, nrow = 3, ncol = 4)
x_mat x_mat
## [,1] [,2] [,3] [,4]
## [1,] 1 4 7 10
## [2,] 2 5 8 11
## [3,] 3 6 9 12
rownames(x_mat) <- paste("Linha", 1:3, sep = "")
x_mat
## [,1] [,2] [,3] [,4]
## Linha1 1 4 7 10
## Linha2 2 5 8 11
## Linha3 3 6 9 12
colnames(x_mat) <- paste("Coluna", 1:4, sep = "")
x_mat
## Coluna1 Coluna2 Coluna3 Coluna4
## Linha1 1 4 7 10
## Linha2 2 5 8 11
## Linha3 3 6 9 12
1.5.6 Data frames
Assim como Matrizes, Data frames são estruturas que permitem organizar dados em formato de linhas e colunas. No R entretanto, as Matrizes não podem guardar objetos de diferentes características. Por exemplo, uma matriz pode ser composta inteiramente numérica:
matrix(1:12, nrow = 4, ncol = 3)
## [,1] [,2] [,3]
## [1,] 1 5 9
## [2,] 2 6 10
## [3,] 3 7 11
## [4,] 4 8 12
Ou alfanumérica:
matrix(letters[1:12], nrow = 4, ncol = 3)
## [,1] [,2] [,3]
## [1,] "a" "e" "i"
## [2,] "b" "f" "j"
## [3,] "c" "g" "k"
## [4,] "d" "h" "l"
Porém, se tentarmos unir um vetor numérico a um vetor alfanumérico, toda a matriz será convertida no formato alfanumérico.
<- LETTERS[3:12]
z z
## [1] "C" "D" "E" "F" "G" "H" "I" "J" "K" "L"
cbind(x, z)
## x z
## [1,] "3" "C"
## [2,] "4" "D"
## [3,] "5" "E"
## [4,] "6" "F"
## [5,] "7" "G"
## [6,] "8" "H"
## [7,] "9" "I"
## [8,] "10" "J"
## [9,] "11" "K"
## [10,] "12" "L"
Para unir diferentes tipos de vetores devemos usar o comando data.frame
que cria uma estrutura com colunas independentes, permitindo que estas colunas tenham diferentes formatos. Podemos unir os objetos x
e z
acima em um data frame como segue:
data.frame(x, z)
## x z
## 1 3 C
## 2 4 D
## 3 5 E
## 4 6 F
## 5 7 G
## 6 8 H
## 7 9 I
## 8 10 J
## 9 11 K
## 10 12 L
Note que automaticamente, a função atribui nomes as colunas (x e z) e às linhas (\(1\) a 10). Estes nomes podem ser alterados com as funções rownames()
e colnames()
.
Neste caso, a coluna x
continua sendo numérica e a coluna z
continua alfanumérica.
Podemos acessar os elementos de um data frame do mesmo modo que fizemos para matrizes. Além destas formas, podemos usar os seguintes comandos:
<- data.frame(Regiao = factor(c("Santos", "Santos",
Dados "Bertioga", "Bertioga",
"Peruibe", "Peruibe")),
Especie_A = c(12,43,80,91,75,115),
Especie_B = c(0, 59, 300, 350, 154, 200))
Dados
## Regiao Especie_A Especie_B
## 1 Santos 12 0
## 2 Santos 43 59
## 3 Bertioga 80 300
## 4 Bertioga 91 350
## 5 Peruibe 75 154
## 6 Peruibe 115 200
$Regiao Dados
## [1] Santos Santos Bertioga Bertioga Peruibe Peruibe
## Levels: Bertioga Peruibe Santos
"Regiao"] Dados[
## Regiao
## 1 Santos
## 2 Santos
## 3 Bertioga
## 4 Bertioga
## 5 Peruibe
## 6 Peruibe
"Regiao"] Dados[,
## [1] Santos Santos Bertioga Bertioga Peruibe Peruibe
## Levels: Bertioga Peruibe Santos
c("Especie_A","Especie_B")] Dados[,
## Especie_A Especie_B
## 1 12 0
## 2 43 59
## 3 80 300
## 4 91 350
## 5 75 154
## 6 115 200
1.5.7 Listas
Combinam em um único objeto todas as estruturas anteriores. Veja o exemplo em que combinamos um vetor alfanumérico, um vetor nominal e um data frame dentro da mesma lista.
<- list(Ilha = c("Ilhabela", "Anchieta", "Cardoso"),
nossalista Areaskm2 = c(347.5, 8.3, 131),
Localizacao = data.frame(
Bioma = rep("Mata Atlantica", 3),
Lat = c(23, 25, 23),
Long = c(45, 47, 45)))
nossalista
## $Ilha
## [1] "Ilhabela" "Anchieta" "Cardoso"
##
## $Areaskm2
## [1] 347.5 8.3 131.0
##
## $Localizacao
## Bioma Lat Long
## 1 Mata Atlantica 23 45
## 2 Mata Atlantica 25 47
## 3 Mata Atlantica 23 45
Podemos ainda inserir listas dentro de outras listas, criando estruturas altamente complexas.
Para acessar os elementos de uma lista podemos identificar seu nome após o operador $
ou sua posição das formas que se seguem:
$Ilha nossalista
## [1] "Ilhabela" "Anchieta" "Cardoso"
1]] nossalista[[
## [1] "Ilhabela" "Anchieta" "Cardoso"
$Localizacao nossalista
## Bioma Lat Long
## 1 Mata Atlantica 23 45
## 2 Mata Atlantica 25 47
## 3 Mata Atlantica 23 45
3]] nossalista[[
## Bioma Lat Long
## 1 Mata Atlantica 23 45
## 2 Mata Atlantica 25 47
## 3 Mata Atlantica 23 45
1.6 Operadores relacionais
Operadores relacionais são aqueles de verificam as relações de menor que (<
), maior que (>
), menor ou igual (<=
), maior ou igual (>=
), igual a (==
) ou diferente de (!=
). O resultado de uma comparação retorna um objeto com o argumento verdadeiro (TRUE
) ou falso (FALSE
). Veja por exemplo:
3 > 5
## [1] FALSE
3 > 3
## [1] FALSE
3 >= 3
## [1] TRUE
<- 5
a <- 7
b == b a
## [1] FALSE
!= b a
## [1] TRUE
Se os objetos têm mais de um elemento, no caso de vetores, matrizes ou data frames, a comparação é feita elemento a elemento, comparando aqueles que estão na mesma posição, ou seja, os que têm o mesmo índice de posição.
<- c(3,5,5,7,1)
a <- c(3,6,1,9,-3)
b < b a
## [1] FALSE TRUE FALSE TRUE FALSE
Os operadores TRUE
e FALSE
, quanto utilizados em operações aritméticas se comportam respectivamente como valores 1
e 0
.
<- 5
a <- c(3,6,1,9,-3)
b <- a < b
y y
## [1] FALSE TRUE FALSE TRUE FALSE
Somando os elementos de y
temos:
sum(y)
## [1] 2
E se tirarmos a média aritmética, teremos a proporção de 1
’s no vetor.
mean(y)
## [1] 0.4
- Observação: Lembre-se que ao compararmos vetores de tamanhos distintos, o R não retorna um erro, mas recicla os elementos do vetor menor para compensar elementos faltantes.
1.7 Operadores lógicos
Operadores lógicos são os de NEGAÇÃO (!
), E lógico, versão vetorizada (&
), E lógico, versão não-vetorizada (&&
), OU lógico versão vetorizada (|
), OU lógico versão não-vetorizada (||
) e OU exclusivo (xor()
). Exemplos destes operadores são:
<- 3:5
x <- 5:3 y
< 4) (x
## [1] TRUE FALSE FALSE
!(x < 4)
## [1] FALSE TRUE TRUE
< 4) & (y > 4) (x
## [1] TRUE FALSE FALSE
< 4) && (y > 4) (x
## [1] TRUE
< 4) | (y > 4) (x
## [1] TRUE FALSE FALSE
< 4) || (y > 4) (x
## [1] TRUE
xor(x,y)
## [1] FALSE FALSE FALSE