Os Professores
- Professor Ricardo Veiga
- Professor Doutor do Departamento de Administração - UFMG.
- Responsável pelo NECC.
- Professor Augusto Filho
- Professor M.e. da Faculdade IBS/FGV.
- Integrante do NECC.
- Este documento foi elaborado no Rstudio em formato RMarkdown. Usou-se o package prettydoc.
Introdução ao R
O R é uma linguagem de programação utilizado para cálculos estatísticos. Foi criada por Ross Ihaka e por Robert Gentleman do Departamento de estatística da Universidade de Auckland, Nova Zelândia e posteriormente foi atualizada por um esforço coletivo entre pesquisadores de diversas partes do mundo.
Instalação do R
O R pode ser baixado em http://nbcgib.uesc.br/mirrors/cran/. Para realizar a instalação basta clicar em Next e finalizar a instalação em seu computador. O usuário poderá optar por editores alternativos da linguagem R. Dentre eles, podemos destacar o R-Studio, disponível em https://www.rstudio.com/products/rstudio/download/#download.
Comandos Básicos no R
O R pode ser utilizado como uma simples calculadora:
2+2## [1] 4
Ou ainda:
5-3## [1] 2
Podemos utilizar a múltiplicação:
5*5## [1] 25
e a divisão:
9/3## [1] 3
Radiciação e Potenciação
Para encontrarmos a raiz quadrada de um determinado número, utilizaremos a função sqrt(). Logo a raiz quadrada de 25 é dada por:
sqrt(25)## [1] 5
No caso da potenciação, deveremos utilizar a acento cincunflexo como simbologia da potencialização. Portanto se desejarmos encontrar \(\begin{equation} 8^2 \end{equation}\) deveremos usar:
8^2## [1] 64
Raiz cúbida
Para determinarmos a raiz cúbida do número 8, deveremos eleva-lo a um terço. Temos \(\sqrt[3]8=8^{\frac{1}{3}}\). Logo temos:
8^(1/3)## [1] 2
Exponencial e logaritmos na base e
Ao trabalhar-mos com o e-neperiano, devemos ter em mente que o seu valor é 2.7182818. Ou seja, o R trabalha com a base e no logaritmo. Desta forma, ao determinarmos \(log_{10}100\), devemos ter em mente que o cálculo realizado será:
No R, essa equação é dada da seguinte forma:
log(100)## [1] 4.60517
Para determinarmos o exponencial do número 1, deveremos utilizar a função exp():
exp(1)## [1] 2.718282
Linguagem de programação orientada a objetos
O R permite que sejam feitas ligações entre textos,números ou resultados a um objeto. Desta forma o R facilita de modo digno de nota o desenvolvimentos de códigos ou a obtenção de resultados, visto que é uma linguagem voltada a objetos. O exemplo a seguir irá mostrar essa facilidade.
Neste exemplo foi atribuído a variável x o valor 2
x=2
x## [1] 2
Aqui será atribuido à variável y o resultado da expressão \(2+5+(2\cdot 3)/3\).
y=2+5+(2*3)/3
y # resultado atribuido a variavel y.## [1] 9
Os vetores
O R permite que trabalhemos com vetores. Para isso é necessário que utilizemos o comando c(). Este comando permite que sejam concatenados as informações a uma variável escolhida. No exemplo a seguir, iremos atribuir os valores (1,3,5), a um vetor de nome x.
x=c(1,3,5)
x #chamando o vetor x com os elementos (1,3,5)## [1] 1 3 5
Logo, a variável x será um vetor com os elementos (1,3,5).
Agora, iremos criar uma variável y que irá receber os valores (2,4,6,8).
y=c(2,4,6,8)
y## [1] 2 4 6 8
Tamanho do vetor
Para se determinar o tamanho de um vetor deve-se usar o seguinte comando: length().
length(x) #determina o tamanho do vetor x## [1] 3
Para o tamanho do vetor y, temos:
length(y)## [1] 4
Operações com vetores
É possivel trabalharmos com vetores e realizarmos somas, subtrações, multiplicações e divisões entre vetores.
Suponha que estejamos trabalhando com o vetor a formado pelos elementos 1,3,5,7 e o vetor b formado pelos números 2,4,6,8. Abaixo será apresentado os resultados das operações fundamentais entre estes vetores:
a=c(1,3,5,7)
b=c(2,4,6,8)Logo a soma do vetor a+b é apresentado a seguir:
a+b## [1] 3 7 11 15
A subratração entre os vetores a-b é apresentado a seguir:
a-b## [1] -1 -1 -1 -1
A multiplicação e divisão são apresentados a seguir:
a*b## [1] 2 12 30 56
a/b## [1] 0.5000000 0.7500000 0.8333333 0.8750000
Alguns comandos úteis:
À medida que novos vetores forem criados, eles serão automaticamente salvos no console do R. Logo para mostrarmos na tela estes vetores deveremos usar o comando ls().
ls() #Mostra os vetores que foram criados.## [1] "a" "b" "x" "y"
Para removermos ou deletarmos um vetor, deveremos usar o comando rm(). No exemplo abaixo, iremos revemover o vetor x.
rm(x) #Remove o vetor x
ls() #Mostra os vetores anteriores, sem o vetor x.## [1] "a" "b" "y"
No entanto, haverá diversas ocacioes em que será necessário limparmos diversos vetores de uma única vez, desta forma o comando de deveremos usar é rm(list=ls()).
rm(list=ls()) #Deleta todos os vetores.
ls() #Irá mostrar que não existem vetores.## character(0)
E finalmente, o comando CTRL + L é usado para limpar a tela do Console do R.
Determinando a classe de um vetor
Os vetores podem ser classificados quanto a sua estrutura como númericos, inteiros, complexos, lógicos ou ainda podem ser classificados como character, ou seja, um vetor formado por textos. Logo, será importante sabermos qual a classe do vetor em que estaremos trabalhando e para isso, utilizaremos o comando class().
O vetor de classe Numerica
Valores decimais como 3.1415927 são chamados de numericos em R. Este é o tipo de valor computacional padrão. Logo se atribuirmos um valor decimal a uma variável z esta variável passará a ter um padrão numerico. No exemplo a seguir, iremos criar um vetor formado por valores decimais e determinaremos a sua classe.
z=c(3.14, 1.72)
z #Vetor formado por números decimais.## [1] 3.14 1.72
Para determinarmos a sua classe, deveremos utilizar o comando class():
class(z) #Irá mostrar a classe do vetor z. ## [1] "numeric"
Vale ressaltar que mesmo se desejarmos salvar um valor inteiro a uma variável qualquer, esta variável ainda será salva com a classe numerica.
t=c(1,5,10) #vetor t formado por números inteiros.
t## [1] 1 5 10
A classe deste vetor ainda será numerica:
class(t)## [1] "numeric"
O fato da variável t não ser considerada um vetor integer pode ser confirmado usando o comando is.integer.
is.integer(t) #Estamos perguntando se o vetor t pode ser considerado um vetor inteiro (interger)## [1] FALSE
O vetor de classe Inteiro
Para criarmos um vetor inteiro em R, utilizamos o comando as.integer() e verificamos se de fato a variável assume o comportamento inteiro usando o comando is.integer().
d=as.integer(c(3,5,9,8))
d #Criamos um vetor inteiro e exibimos o seu valor## [1] 3 5 9 8
Agora, iremos verificar o comportamento da variável d em relação à sua estrutura.
class(d) #Estamos verificando a classe do vetor.## [1] "integer"
Ou ainda:
is.integer(d) #Estamos perguntando a classe da variável d.## [1] TRUE
O vetor de classe complex
Um valor complexo em R é definido pelo número puro imaginário i. Logo, poderemos criar uma variável complexa da seguinte forma:
e=c(3+4i,5+3i) #Criação de uma variável complexa
e## [1] 3+4i 5+3i
Para determinarmos a sua classe, utilizaremos o comando class().
class(e) #Imprmindo o nome da classe de e## [1] "complex"
O vetor de classe character
Um vetor caracter é usado para armazenar textos em R. Se criarmos uma variável fque receba o nome augusto e uma outra variável g que receba o nome filho, poderemos usar a função paste() para juntar os nomes separados por espaços.
f="augusto"; g="filho"
paste(f,g)## [1] "augusto filho"
No entanto é bem melhor criar uma cadeia de caracteres com a função sprintf(), que possui uma sintaxe semelhante a utilizada na linguagem C.
sprintf("%s tem %d reais.", "Augusto", 100) ## [1] "Augusto tem 100 reais."
Ainda é possível extrairmos uma substring. Para isso deveremos utilizar a função substr(). Neste exemplo iremos extrair uma substring entre a 2 e a 30 posição da string.
substr("Não aprendi a me render, que caia o inimigo então.",start = 2,stop = 30)## [1] "ão aprendi a me render, que c"
Ainda poderemos substituir a primeira ocorrência da palavra caia por outra palavra durma na string usando a função sub().
sub("caia","durma","Não aprendi a me render, que caia o inimigo então.")## [1] "Não aprendi a me render, que durma o inimigo então."
Vetores Lógicos
Os vetores lógicos são aqueles em que somente dois valores são possíveis: FALSE ou TRUE. Eles são usados para a realização de testes.
Se desejarmos criar um vetor lógico formado por TRUE, TRUE, TRUE FALSE, poderemos proceder da seguinte forma:
j=c(T,T,T,F)
j## [1] TRUE TRUE TRUE FALSE
class(j)## [1] "logical"
Poderemos realizar testes lógicos.
x=1; y=2 #Estamos atribuindo o valor 1 para x e o valor 2 para y
z= x > y #Estamos perguntando se x é maior do que y
z## [1] FALSE
O resultado nos mostra que z é FALSE, ou seja, x não é maior do que y.
Iremos perguntar qual é a classe do vetor z:
class(z)## [1] "logical"
As operações lógicas padrão são: & (e), |(ou) e !(negação).
u=TRUE; v = FALSE
u & v #Estamos perguntando U e V (verdadeiro e falso = falso)## [1] FALSE
Da mesma forma, pode-se perguntar:
u | v #Estamos perguntando U ou V (verdadeiro OU falso = Verdadeiro)## [1] TRUE
E podemos perguntar a negação de u.
!u #Visto que u é TRUE então a resposta para NÃO TRUE é FALSE.## [1] FALSE
Sequências
É possível a criação de sequência no R usando os comandos : e seq(). Trabalhar com sequências falicita a manipulação de dados. A seguir apresentaremos uma sequência de 1 até 10.
1:10## [1] 1 2 3 4 5 6 7 8 9 10
Ainda é possível a utilização da função seq() para criarmos sequências mais elaboradas. No exemplo a seguir será apresentado uma sequência com início em 2 e término em 100 alternando-se de dois em dois elementos.
seq(from=2,to=100,by=2) #Sequência com início em 2 e término em 100, variando de 2 em 2.## [1] 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34
## [18] 36 38 40 42 44 46 48 50 52 54 56 58 60 62 64 66 68
## [35] 70 72 74 76 78 80 82 84 86 88 90 92 94 96 98 100
Ainda podemos decidir a quantidade de elementos que formaram a sequência com a instrução length().
seq(2,100,length=20) #Sequência com início em 2 e término em 100 com 20 elementos.## [1] 2.000000 7.157895 12.315789 17.473684 22.631579 27.789474
## [7] 32.947368 38.105263 43.263158 48.421053 53.578947 58.736842
## [13] 63.894737 69.052632 74.210526 79.368421 84.526316 89.684211
## [19] 94.842105 100.000000
Ainda é possível a construção de sequência com números repetidos, bastando-se para isso utilizar o comando rep().
rep(2,5) #O número 2 será repetido 5 vezes.## [1] 2 2 2 2 2
No exemplo a seguir, a sequência de 1 até 5 irá se repetir 4 vezes:
rep(1:5,4) #A sequência numérica de 1 até 5 irá se repetir 4 vezes.## [1] 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5
Temos ainda o comando each() que irá determinar a quantidade de repetiçõe que a sequência deverá apresentar.
rep(1:10,each=4)## [1] 1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4 5 5 5 5 6 6 6
## [24] 6 7 7 7 7 8 8 8 8 9 9 9 9 10 10 10 10
Matrizes
O trabalho com matrizes é muito importante no R. A criação de uma matriz é feita pelo comando matrix(). De um modo geral basta criarmos um vetor de tamanho específico e determinar as dimensões que a matriz deverá ter, ou seja, determinar o número de linhas e colunas (nesta ordem).
x=seq(1:9) #Vetor construído por uma sequência de 1 até 9.
matrix(x,nrow=3,ncol=3) #Matriz criada a partir do vetor x, com 3 linhas e 3 colunas.## [,1] [,2] [,3]
## [1,] 1 4 7
## [2,] 2 5 8
## [3,] 3 6 9
No exemplo anterior foi construído uma matriz com três linhas e três colunas.
Neste próximo exemplo, iremos criar uma matriz com três linhas e quatro colunas.
x=seq(1:12) #Vetor x com 12 elementos
matrix(x,nrow=3,ncol = 4) #Matriz com três linhas (rwow) e quatro colunas (ncol).## [,1] [,2] [,3] [,4]
## [1,] 1 4 7 10
## [2,] 2 5 8 11
## [3,] 3 6 9 12
Observe que a matriz é preenchida pelas colunas. Se desejarmos que a matriz seja preenchida pelas linhas deveremos dizer isso ao R com o seguinte comando byrow=TRUE.
x=seq(1:12)
matrix(x,nrow=3,ncol=4,byrow=TRUE) #O argumento byrow=T orienta o R para preencher a matriz com linha.## [,1] [,2] [,3] [,4]
## [1,] 1 2 3 4
## [2,] 5 6 7 8
## [3,] 9 10 11 12
E se desejassemos mudar a dimensão da matriz para uma matriz 4 X 3:
x=seq(1:12)
matrix(x,ncol=3,byrow = T) #O argumento byrow=T é o mesmo que byrow=TRUE## [,1] [,2] [,3]
## [1,] 1 2 3
## [2,] 4 5 6
## [3,] 7 8 9
## [4,] 10 11 12
Obtendo informações sobre a matriz
Em diversas situações será necessário que você descubra a dimensão da matriz em que você estará trabalhando. Para isso basta usar o comando dim().
x=seq(1:25) #Criação de um vetor de 25 elementos
y=matrix(x,nrow=5,ncol=5,byrow=T) #Criação de uma matriz y com 5 linhas e 5 colunas
dim(y) #Descreve a dimensão da matriz y## [1] 5 5
Portanto a matriz y possui 5 linhas e 5 colunas.
Então uma forma mais resumida de escrever uma matriz pode ser apresentada a seguir:
x=matrix(c(1:12),3,4,byrow = T) #X é a matriz que receberá um vetor com 12 elementos
x #Os elementos estão em 3 linhas e 4 colunas e são agrupados por linha. ## [,1] [,2] [,3] [,4]
## [1,] 1 2 3 4
## [2,] 5 6 7 8
## [3,] 9 10 11 12
Se desejassemos obter as medidas de posição de cada coluna da matriz x deveremos utilizar o comando summary().
x=matrix(c(1:12),3,4,byrow=T) #Estamos criando uma matriz 3 x 4.
summary(x) #Estatística descritiva de cada coluna. ## V1 V2 V3 V4
## Min. :1 Min. : 2 Min. : 3 Min. : 4
## 1st Qu.:3 1st Qu.: 4 1st Qu.: 5 1st Qu.: 6
## Median :5 Median : 6 Median : 7 Median : 8
## Mean :5 Mean : 6 Mean : 7 Mean : 8
## 3rd Qu.:7 3rd Qu.: 8 3rd Qu.: 9 3rd Qu.:10
## Max. :9 Max. :10 Max. :11 Max. :12
A seguir é apresentado uma descrição de toda a matriz:
summary(as.numeric(x)) #O comando as.numeric(x), transformou a matriz x em um vetor numerico.## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1.00 3.75 6.50 6.50 9.25 12.00
Posição de um elemento na matriz
Para selecionarmos um elemento na matriz, deveremos usar [].
x=matrix(c(1:25),ncol=5,byrow = T) #Matriz x com 25 elementos
x #Mostrando a matriz x## [,1] [,2] [,3] [,4] [,5]
## [1,] 1 2 3 4 5
## [2,] 6 7 8 9 10
## [3,] 11 12 13 14 15
## [4,] 16 17 18 19 20
## [5,] 21 22 23 24 25
x[8] #Mostra o oitavo elemento, lido por coluna.## [1] 12
No exemplo acima, o oitavo elemento é o número 12.
Se precisarmos selecionar um elemento baseado em sua posição na matriz, é mais conveniente localizarmos pela posição da linha e coluna, deta forma se tentarmos extrair o número 20, precisamos localiza-lo na matriz em relação a sua posição. Logo o valor 20 ocupa a quarta linha e quinta coluna, temos: \(A_{4,5}=20\). O R utiliza a seguinte formulação para determinar qual é o elemento:
x[4,5] #Determina o elemento que ocupa a posição: [lina,coluna]## [1] 20
Ainda poderemos selecionar todos os elementos que ocupam a quarta linha da matriz x:
x[4,] #Determina os elementos que estão na 4 linha## [1] 16 17 18 19 20
Ou selecionarmos todos os elementos que ocupam a 5 coluna da matriz x:
x[,5] #Determina os elementos que estão na 5 coluna## [1] 5 10 15 20 25
Mais operações com matrizes
Os comandos cbind() e rbind()são muito usados em matrizes para o aumento de colunas e linhas respectivamente. Vamos supor que a matriz X seja constituída pelos números 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, ou seja, a matriz X será uma matriz 3 x 4.
x=matrix(c(1:12),ncol=4,byrow = T)
x #Matriz x com 3 linhas e 4 colunas.## [,1] [,2] [,3] [,4]
## [1,] 1 2 3 4
## [2,] 5 6 7 8
## [3,] 9 10 11 12
Agora é necessário que você adicone uma quinta linha à matriz \(X_{3,4}\), de modo que ela passe a ter dimensão \(X_{3,5}\).
y=cbind(x,100:102) #Aqui y será a nova matriz com a adição de uma nova coluna.
y ## [,1] [,2] [,3] [,4] [,5]
## [1,] 1 2 3 4 100
## [2,] 5 6 7 8 101
## [3,] 9 10 11 12 102