Professional Documents
Culture Documents
Introduo
Eric Gorgens
Esse livro est venda em http://leanpub.com/comprintroducao
Essa verso foi publicada em 2016-01-23
ISBN 978-85-920621-0-1
This is a Leanpub book. Leanpub empowers authors and publishers with the Lean Publishing
process. Lean Publishing is the act of publishing an in-progress ebook using lightweight tools and
many iterations to get reader feedback, pivot until you have the right book and build traction once
you do.
2016 Eric Gorgens
Dedico este livro aos alunos e colegas que buscaram no R a soluo dos seus problemas e
encontraram em mim o apoio para solucion-los. Ao ensinar, aprendi em dobro.
Contedo
Sobre o livro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Sobre o R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Estrutura de dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
Operadores matemticos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
Operadores lgicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
24
Adicionando pacotes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
29
RStudio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
33
Espao de trabalho . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
37
Importando dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
44
Dataframe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
47
.
.
.
.
51
51
55
56
Looping WHILE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
59
Looping FOR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
61
Famlia APPLY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
63
Funes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
65
Prximos passos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
67
Agradecimentos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
68
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sobre o livro
Bem vindo ao mundo do R. O R no s um software, nem se resume a uma linguagem. O R um
estilo de pesquisar, estudar e ensinar. Atravs de seus cdigos e scripts voc entrar num mundo
sem limites, aberto experimentao e troca de experincia. Um mundo em que no existe apenas
uma forma de se chegar resposta correta, mas sim uma gama de alternativas!
Voc deve estar se perguntando: porque comear a trabalhar com o R? A resposta passa por algumas
perspectivas interessantes.
O R moderno, o R flexvel, o R uma poderosa linguagem, o R verstil e o R grtis.
No R, voc trabalha com linhas de comando e scripts; e no clicando em botes na tela. No se assuste.
Pode parecer difcil, mas na verdade, a linguagem R simples de aprender e bastante lgica quando
pensamos em anlise de dados. Aprender uma linguagem de computao tem muitas semelhanas
com o aprendizado de uma lngua estrangeira. A principal delas : voc aprende praticando, por isso,
pratique muito! Com o R voc no est limitado por uma sequncia pr-definida de rotinas.
O R quebra a dependncia do usurio em clicar botes, fazendo com que cada anlise seja realmente
fruto de uma reflexo sobre as estatsticas e os dados. Este processo de reflexo e criao da
anlise fica documentado, passo a passo no histrico (ou script), podendo ser executado a qualquer
momento, por qualquer pessoa.
O usurio tem disponvel um conjunto poderoso e verstil de ferramentas para explorar graficamente
os resultados. Aproveite! Antes de comear uma anlise estatstica, explore seus dados! S assim voc
ir de fato conhecer o que voc tem em mos.
As ferramentas disponveis, passam pelo acesso a vrios tipos de dados, at recursos para manipulao de bases, passando pelos modelos estatsticos tradicionais e modernos. Os mais influentes
acadmicos e pesquisadores do mundo utilizam o R para desenvolver suas pesquisas. Assim as
novidades nas reas de estatstica, mquinas de aprendizado e modelagem estaro primeiramente
disponveis aqui. Atualmente so mais de 2000 pacotes que potencializam o seu R disponveis para
download.
Com uma imensa comunidade que continua crescendo, se voc tiver uma dvida, a chance de algum
j ter esbarrado com este problema muito grande. O tempo mdio que uma pergunta leva para ser
respondida no StackOverflow (maior comunidade de programadores do mundo) de 0,0147 dias, o
que equivale a 21 minutos.
E o melhor de tudo, o R gratuito. Por se tratar de um projeto de cdigo aberto, voc pode usar
o R sem nenhum custo adicional; ou seja sem necessidade de pagar por inscries, assinaturas ou
licenas.
1
Sobre o livro
Este livro nasceu da experincia de ensinar o R para alunos de graduao e ps-graduao. Alunos
que tm sede em botar a mo na massa e aprender fazendo. Com este propsito, todos os captulos
deste livro podem ser acompanhados na prtica. Os exemplos podem ser testados, adaptados e
modificados.
Acompanhe atualizaes, faa download das base de dados utilizadas ao longo do livro e
conhea os outros livros da srie em: http://gorgens.wix.com/compr
Aqui, voc ir aprender o essencial. No temos a pretenso de ensinar tudo sobre o R. Nosso objetivo
fazer com que voc entenda e sinta-se confortvel com o ambiente R. Para isto, usamos uma
linguagem simples e direta, com exemplos e explicaes sobre o que estamos digitando e executando
no R.
Da sua parte, espero que seja proativo. No digite os exerccios. Faa e entenda os exerccios! Faa
modificaes e veja o que acontece com o resultado. Seja curioso!
Bom aprendizado.
Sobre o R
O R um programa baseado em linhas de comando. Isto , o usurio cria uma linha de cdigo
atravs de uma sequncia de palavras e nmeros. Ao digitar a linha no console, o R interpreta e
executa a ao codificada na linha. Tambm possvel informar para R, um conjunto de linhas de
uma nica vez, que conhecemos como script. Ao processar o script no console, o R ir ler a primeira
linha, interpretar e executar. S depois que o processamento da primeira linha terminar, que a
segunda linha ser lida, interpretada e executada. Esta sequncia segue, at que todo o script tenha
sido processado.
Para que o R compreenda as linhas de comando criadas, fundamental que o usurio conhea os
comandos, seus parmetros e a sintaxe da linguagem de interpretao. No caso de uma grafia errada,
ou um parmetro faltante o programa ser capaz de interpretar, podendo at mesmo interpretar de
forma equivocada.
No caso do R, a linguagem utilizada recebe o mesmo nome: linguagem R. A linguagem R possui
regras prprias, que chamamos de sintaxe. Estas regras precisam ser seguidas para assegurar que o
programa interprete e processe as linhas com sucesso.
No se preocupe agora com os termos console e script. Na prxima seo teremos uma discusso
detalhada do ambiente do R. L discutiremos onde encontrar e como funciona cada um destes
elementos. No se preocupe tambm em rodar os cdigos que veremos a seguir, eles sero usados
apenas para mentalizarmos alguns aspectos importantes!
Ao abrir o R pela primeira vez, a janela chamada Console estar aberta e disponvel. nesta janela
que os comandos sero interpretados e processados. No console, teremos algo parecido com o quadro
abaixo:
1
2
3
4
5
6
7
8
9
10
11
12
13
Sobre o R
14
15
16
17
18
19
Veja no final do quadro a presena do sinal > que indica que o console est esperando uma nova
linha de comando. Assim, se digitarmos:
2+3
O console poder ser visto da seguinte forma:
1
> 2 + 3
Quando a tecla enter for pressionada, o R ir interpretar a linha de comando digitada, processar e
ento retornar o resultado:
1
2
[1] 5
>
O que o R acabou de fazer? Ele pegou o valor 2 e adicionou o valor 3, retornando um vetor de um
nico elemento ([1]) contendo o valor 5. Como ele terminou o processamento da linha que digitamos,
o sinal > aparece no final da janela, avisando que o console est pronto para executar uma nova linha.
Outro sinal que pode aparecer com frequncia quando voc estiver digitando linhas de comando
no console o +. Ele aparece uma linha digitada de forma incompleta. Assim, o sinal + aparece
indicado ao usurio que o R continua aguardando que a linha de comando seja encerrada. Imagine
que desejo realizar a soma de 2 + 5. Veja o exemplo de uma adio digitada de forma incompleta:
1
> 2 +
Ao apertamos enter, o console tentar processar a soma. No entanto aps o sinal +, o R espera que
venha outro termo quer deveria ser somado a 2. Por isto, o R exibe um + na linha abaixo do comando
digitado para informar ao usurio que algo ainda falta para que o comando possa ser interpretado.
1
2
> 2 +
+
Sobre o R
1
2
3
4
> 2 +
+ 5
[1] 7
>
No dia a dia, dificilmente conseguiremos resolver um problema em apenas uma linha. a que entra
em jogo o script! O R possui um editor de texto para a criao de script. Quando solicitado, uma
segunda janela chamada R Editor se abre e nesta janela podemos construir uma sequncia de linhas
para ser no futuro apresentado ao console.
Assim, possvel abrirmos uma segunda janela: o editor de script. No script possvel digitarmos
uma sequncia de linhas que posteriormente sero apresentados ao console. Note que o voc escreve
no R Editor no processado de imediato. O processamento ocorre quando uma linha do script
levada ao console. Apenas o console consegue interpretar e processar linhas de comando.
Vamos para um exemplo. Imagine que desejamos processar o script abaixo:
1
2
3
4
x = 2
print(x)
x = x + 3
print(x)
O prximo passo processar linhas por linha do script. Como dissemos anteriormente, as linhas
precisam ser processadas uma a uma. Se processarmos no console a primeira linha:
1
> x = 2
Digitando e pressionando a tecla enter, nada acontecer na tela. Um novo smbolo > aparecer abaixo
da linha anterior:
1
2
> x = 2
>
No se preocupe, deu certo! O R criou na memria uma varivel e assinalou a ela o valor 2. O sinal
> indica que o R est pronto para receber a prxima linha de comando!
Nossa prxima linha, seguindo o script, seria:
1
> print(x)
Sobre o R
1
2
3
4
> x = 2
> print(x)
[1] 2
>
O console imprimiu na tela o valor 2, que est armazenado num vetor de um elemento salvo com o
nome de x. Fcil no? Digitando a terceira linha do script, pressionando enter. Digitando a quarta
linha e pressionando enter em seguida, o resultado ser:
1
2
3
4
5
6
> x = 2
> print(x)
[1] 2
> x = x + 3
> print(x)
[1] 5
Voc consegue descrever o que console acabou de fazer ao rodar todas as linhas do script? Fcil!
Somou 2 + 3 retornando o valor 5. Vamos destrinchar o script?
Primeiro criamos uma varivel x que armazena num vetor de nico elemento o valor 2.
Em seguida pedimos para exibir a varivel x.
Depois pegamos o valor atual de x, adicionamos 3 e salvamos novamente em x.
Finalizamos pedindo para exibir o valor atual da varivel x.
Agora que entendemos melhor como o R funciona, vamos conhecer o nosso ambiente de trabalho
nos prximos captulos. Quando voc abrir o R pela primeira vez, uma janela de abrir. A janela
externa, maior, o programa R propriamente dito! A janela interna, menor, o console.
Sobre o R
Janela do R
Como j mencionamos anteriormente, podemos tambm trabalhar com uma segunda janela interna
chamada de R Editor. nesta janela que construmos os scripts. Clique em File -> New Script. Seu
ambiente de trabalho ser:
Sobre o R
Ambiente do R
Por outro lado, quando o R Editor est ativado, a barra de ferramentas muda:
No perderemos tempo agora, explicando cada boto das barras de ferramentas. No entanto, vale a
pena aproveitarmos para conhecer o boto Run line, or selection:
Este boto pode ser usado quando queremos pegar uma linha do script e processar no console. Basta
selecionar a linha no script em questo, e clicar no boto Run line, or selection. Automaticamente a
linha selecionada ser enviada ao console e processada.
Veja o exemplo abaixo, no qual selecionamos a primeira linha do script e clicamos no boto Run
line, or selection. O comando foi processado da mesma forma de quando digitamos diretamente no
Sobre o R
console.
Utilizando a mesma idia de seleo e boto Run line, or selection, podemos enviar ao console mais
uma linha de comando. Veja o exemplo abaixo:
10
Sobre o R
Agora sim convido voc para colocar a mo na massa. Assim chegou a hora de instalar o R. Existem
vrios tutoriais na internet, bem como vdeo-tutoriais excelentes. O R roda em todos os sistemas
operacionais: Mac, Windows e Linux.
Uma vez instalado, voc poder acompanhar todos os exerccios do livro realizando-os
diretamente em seu computador. fundamental que voc realmente coloque a mo na
massa. a nica forma de errar e aprender!
Estrutura de dados
Uma varivel pode assumir diferentes estruturas. As estruturas possuem propriedades que iro
influenciar o que voc pode ou no pode fazer com os seus dados. Uma varivel que for criada
como matriz, no possui as mesmas propriedades de uma varivel estruturada como lista. Assim,
no possvel aplicar o operador de soma a estas duas variveis.
Estas estruturas so criadas para armazenar dados. Estes dados geralmente podem ser definidos
como numricos (inteiros ou decimais), caracteres (string) ou lgicos. Algumas estruturas permitem
que diferentes tipos de dados sejam armazenados ao mesmo tempo. Em outras estruturas, apenas
um tipo de dado pode ser simultaneamente armazenado.
Na linguagem R, no necessrio declarar uma varivel antes dela ser criada. O programa j tenta
determinar a melhor classe com base na primeira vez que algo for atribudo varivel. Vamos rodar
a seguinte linha:
1
x = 2
O sinal = a representao do termo atribuio, e pode ser substitudo pelo sinal <-. Portanto, o
comando abaixo equivale ao comando anterior:
1
x <- 2
Os comandos acima so equivalentes e podem ser interpretados como: atribua o valor 2 varivel
x. Ao criar a varivel x, o R ir definir x como numrico e armazenar numa estrutura de vetor, pois
o 2 claramente um nmero.
Vetor a estrutura mais simples que uma varivel pode assumir, e somente pode assumir um mesmo
tipo de dados. No exemplo:
1
a <- 2
11
Estrutura de dados
1
2
12
length(a)
[1] 1
Vamos criar um script com 4 linhas de comando que criam quatro diferentes variveis. Pegue cada
uma das linhas do script abaixo e processe no console:
1
2
3
4
a <- 2
b <- c(1, 2, 3)
idade <- c(2, 4, 3)
experiencia <- c(1, 5, 7)
Note, que quando voc quer criar um vetor com mais de um elemento, necessrio utilizar a funo
c(). A letra c vem de components, assim, ao utilizar a funo c() voc est informando ao R que
construa um vetor com os componentes listados dentro da funo.
Aps rodar cada linha do script acima, voc no v, mas agora existe na memria as variveis:
a, b, idade e experiencia. Utilizando o comando length() voc descobrir que o vetor a possui
comprimento igual a 1, e logo composto por apenas um elemento. J os vetores b, idade e
experiencia possuem comprimento 3 e portanto so compostos por 3 elementos.
1
2
Length(a)
[1] 1
1
2
length(b)
1
2
length(idade)
1
2
length(experiencia)
[1] 3
[1] 3
[1] 3
Todos os quatro vetores so vetores numricos, e por s armazenarem nmeros, podem participar
de operaes matemticas que no seriam possveis em vetores de caracteres. Mas no vamos nos
preocupar agora com as operaes matemticas. Logo logo voltaremos neste assunto.
Agora imagine que voc pegue dois vetores com trs elementos cada um, e combine lado a lado estes
dois vetores. O que acontece? Voc acaba de criar uma matriz de duas colunas e trs linhas. E se
voc combinar estes dois vetores de trs elementos um acima do outro? Voc cria uma matriz com
duas linhas e trs colunas. Esta combinao de vetores s funciona quando os elementos possuem
o mesmo formato, ou seja, somente nmeros ou somente caracteres!
Matrizes nada mais so que combinaes de vetores com o mesmo comprimento e tipo de dado.
As variveis estruturadas como matriz possuem portanto uma caracterstica que o vetor no tem:
dimenso. A dimenso uma caracterstica que indica quantas linhas e quantas colunas a matriz
possui. Vamos criar uma matriz e armazen-la na varivel m1:
Estrutura de dados
13
O comando dim() retorna a dimenso de uma matriz. Antes de rodar esse comando para a matriz
recm criada m1, qual a dimenso desta matriz? Se voc respondeu 2 x 3, acertou! Agora rode o
comando abaixo e tire a prova:
1
2
dim(m1)
[1] 2 3
A resposta uma matriz de dois elementos. O primeiro elemento, de valor 2, indica o nmero de
linhas. O segundo elemento, de valor 3, indica o nmero de colunas. Vamos exibir o vetor para
verificar visualmente o nmero de linhas e de colunas? Digite o comando abaixo:
1
2
3
4
m1
[1,]
[2,]
2
1
Agora podemos conferir visualmente que nossa matriz m1 realmente possui duas linhas e trs
colunas. Perceba tambm, que os trs primeiros elementos (2, 4, 3) do vetor informado durante a
criao da matriz foram organizados ao longo da primeira linha, e os trs ltimos elementos (1, 5,
7) foram organizados ao longo da segunda linha. Isto aconteceu porque pedimos que o parmetro
byrow da funo matrix() fosse verdadeiro (= TRUE).
E se criarmos uma nova matriz m2 com o mesmo comando da m1, alterando o parmetro byrow
para falso (= FALSE)?
1
1
2
3
4
m2
[1,]
[2,]
O acesso a elementos, linhas e colunas de uma matriz pode ser feito utilizando a notao de [ ] logo
aps o nome da matriz que se deseja manipular. Execute as linhas do script abaixo no seu console.
Todas as linhas foram construdas sobre a matriz m1 que criamos h pouco.
Estrutura de dados
1
2
3
4
14
m1[1,1]
m1[1,]
m1[,2]
m1[2, 1:2]
Na linha 1 do script pedimos para exibir o elemento da linha 1 e coluna 1. Na segunda linha,
solicitamos que sejam exibidos todos os elementos da linha 1. Na terceira linha do script solicitamos
que sejam exibidos todos os elementos da segunda coluna. Na ltima linha do script, solicitamos
que sejam exibidos os elementos da linha 2 e colunas 1 at 2.
Assim, vejamos cada comando com seu respectivo resultado:
1
2
m1[1,1]
[1] 2
1
2
m1[1,]
[1] 2 4 3
1
2
m1[,2]
[1] 4 5
1
2
m1[2, 1:2]
[1] 1 5
Dataframe uma condio especial de combinao lado a lado de vetores. Ao contrrio das matrizes,
o dataframe no exige que os vetores tenham os mesmos tipos de dados. Assim, por exemplo, a
primeira coluna do dataframe pode ser numrica, e a segunda coluna pode ser de texto e a terceira
coluna com data. O R possui alguns dataframes que vem automaticamente quando o software
instalado. Estes dataframes so geralmente usados como exemplos nos tutoriais e arquivos de ajuda.
Uma dessas bases o mtcars.
Para carregarmos esta base de dados basta digitar:
1
data(mtcars)
Aps digitar o comando acima em seu console, voc ter criado uma varivel na memria chamada
mtcars contendo os dados em questo. Como exemplo, vamos usar o comando head() para visualizar
as colunas deste dataframe e as 6 primeiras linhas:
15
Estrutura de dados
1
2
3
4
5
6
7
8
head(mtcars)
Mazda RX4
Mazda RX4 Wag
Datsun 710
Hornet 4 Drive
Hornet Sportabout
Valiant
21.0
21.0
22.8
21.4
18.7
18.1
6
6
4
6
8
6
160
160
108
258
360
225
1
1
1
0
0
0
Visualizando apenas as 6 primeiras linhas do dataframe mtcars podemos perceber que este a
estrutura de dados que se assemelha s planilhas eletrnicas como Excel. Assim, podemos entender
o dataframe como sequncia de observaes (linhas) de determinadas variveis (colunas).
Assim como as matrizes, os dataframes tambm possuem dimenso, e podemos verificar a dimenso
atravs do comando dim():
1
2
dim(mtcars)
[1] 32 11
No script abaixo, seguem outros comandos teis para serem usados com os dataframes:
1
2
1
2
1
2
16
Estrutura de dados
1
2
3
4
mtcars[,3]
[1] 160.0 160.0 108.0 258.0 360.0 225.0 360.0 146.7 140.8 167.6 167.6 275.8
[13] 275.8 275.8 472.0 460.0 440.0 78.7 75.7 71.1 120.1 318.0 304.0 350.0
[25] 400.0 79.0 120.3 95.1 351.0 145.0 301.0 121.0
1
2
mtcars[3, 5]
[1] 3.85
1
2
3
mtcars[1,]
1
2
3
4
5
mtcars[1:3,]
Mazda RX4
21
Mazda RX4
21.0
Mazda RX4 Wag 21.0
Datsun 710
22.8
6
6
4
0
0
1
wt
1
1
1
Outro recurso poderoso do R so os filtros. Voc pode tanto usar a notao de [ ] ou ento a funo
subset(). Vamos ver alguns exemplos de filtros. No exemplo 1, imagine que queremos separar as
linhas que possuem o valor 4 na varivel cyl. Podemos usar a funo subset() ou a notao [ ]:
1
2
3
4
5
6
7
8
9
10
11
12
13
subset(mtcars, mtcars$cyl == 4)
Datsun 710
Merc 240D
Merc 230
Fiat 128
Honda Civic
Toyota Corolla
Toyota Corona
Fiat X1-9
Porsche 914-2
Lotus Europa
Volvo 142E
22.8
24.4
22.8
32.4
30.4
33.9
21.5
27.3
26.0
30.4
21.4
4
4
4
4
4
4
4
4
4
4
4
108.0
146.7
140.8
78.7
75.7
71.1
120.1
79.0
120.3
95.1
121.0
1
0
0
1
1
1
0
1
1
1
1
17
Estrutura de dados
1
2
3
4
5
6
7
8
9
10
11
12
13
mtcars[mtcars$cyl == 4,]
Datsun 710
Merc 240D
Merc 230
Fiat 128
Honda Civic
Toyota Corolla
Toyota Corona
Fiat X1-9
Porsche 914-2
Lotus Europa
Volvo 142E
22.8
24.4
22.8
32.4
30.4
33.9
21.5
27.3
26.0
30.4
21.4
4
4
4
4
4
4
4
4
4
4
4
108.0
146.7
140.8
78.7
75.7
71.1
120.1
79.0
120.3
95.1
121.0
1
0
0
1
1
1
0
1
1
1
1
Agora, imagine que queremos as variveis mpg e hp das observaes que possuem o valor 4 na
varivel cyl:
1
2
3
4
5
6
7
8
9
10
11
12
13
1
2
3
4
5
6
7
8
9
10
mpg
Datsun 710
Merc 240D
Merc 230
Fiat 128
Honda Civic
Toyota Corolla
Toyota Corona
Fiat X1-9
Porsche 914-2
Lotus Europa
Volvo 142E
hp
22.8 93
24.4 62
22.8 95
32.4 66
30.4 52
33.9 65
21.5 97
27.3 66
26.0 91
30.4 113
21.4 109
hp
18
Estrutura de dados
11
12
13
Porsche 914-2
Lotus Europa
Volvo 142E
26.0 91
30.4 113
21.4 109
Agora, a lista dados possui na sua posio 1 o dataframe mtcars, na sua posio 2 o vetor numrico
de um elemento a e na posio 3 o vetor idade. Para recuperar o objeto de uma lista, podemos usar
a notao [[ ]]. Veja o exemplo para recuperar o objeto salvo na posio 3:
1
dados[[3]]
Ao longo deste captulo, criamos na memria do nosso computador vrias variveis. Voc consegue
se lembrar de todas elas? No se preocupe. Existe uma funo que faz isto para voc:
1
2
3
ls()
[1] "a"
[6] "m1"
"b"
"m2"
"dados"
"mtcars"
"experiencia" "idade"
"x"
E se no quisermos mais a varivel x? Sem problemas, podemos deletar atravs do comando rm():
1
rm(x)
Se quiser excluir todas as variveis que voc criou na memria, basta usar o comando:
rm(list = ls(all=TRUE))
Como este livro para ensinar os primeiros passos, o que voc viu at aqui so as estruturas e tipos
de dados mais utilizados. Mas existem outras estruturas que com o passar do tempo, voc ter a
oportunidade de aprender!
Operadores matemticos
Agora que voc j est se acostumando ao R, chegou a hora de aprender a notao dos principais
operadores matemticos. Existem algumas excees, mas para facilitar o aprendizado, como estamos
falando de operadores matemticos, assumiremos que nossas variveis so numricas.
Para os exemplos abaixo, crie as seguintes variveis:
1
2
3
a = 2
b = 100
c = c(1, 2, 3, 4, 5)
Vamos agora utilizar as variveis acima e ver diversos exemplos de cada um dos operadores
matemticos abaixo:
Soma
1
2
a + 10
[1] 12
1
2
a + b
[1] 102
1
2
a + b + 102
[1] 204
1
2
c + 10
[1] 11 12 13 14 15
Subtrao
19
Operadores matemticos
1
2
a - 10
[1] -8
1
2
a - b
[1] -98
1
2
a + b 102
[1] 0
1
2
c - 10
20
[1] -9 -8 -7 -6 -5
Diviso
1
2
b / 10
[1] 10
1
2
a / b
[1] 0.02
1
2
a + b / 10
[1] 12
1
2
(a + b) / 10
[1] 10.2
Operadores matemticos
1
2
b * 10
[1] 1000
1
2
a * b
[1] 200
1
2
a + b * 10
[1] 1002
1
2
(a + b) * 10
[1] 1020
21
Exponenciao
1
2
a^2
[1] 4
1
2
a^b
[1] 1.267651e+30
1
2
a^-1
[1] 0.5
1
2
c^2
[1]
9 16 25
Quando o nmero muito alto ou muito pequeno, o R apresenta o valor em notao cientfica,
utilizando o termo e+. Isto indica que o nmero apresentado deve ser multiplicado por 10 tantas
vezes quanto o nmero que acompanha e+. Assim 1.267651e+30 equivale a 1.267651(103 0)
Resto da diviso (reminder)
A maioria das pessoas no est acostumada a usar o resto da diviso. No ingls, chamamos este
operador de reminder. Imagine um nmero qualquer x. Se a diviso de x por 2 tiver resto zero, x
par. Se o resto da diviso for diferente de zero, x impar. Este um exemplo do uso do operador
reminder para verificar se um nmero par ou mpar. Veja alguns exemplos de como obter o resto
de uma diviso:
Operadores matemticos
1
2
10 %% 2
[1] 0
1
2
11 %% 2
[1] 1
1
2
11 %% 3
[1] 2
22
Raiz quadrada
A raiz quadrada pode ser obtida por duas formas. A primeira atravs da operao de exponenciao,
lembrado que a raiz quadrada de x, por exemplo, equivalente x elevado a meio. Outra alternativa
uma funo sqrt().
1
2
sqrt(4)
1
2
4^(1/2)
[1] 2
[1] 2
Prefira a forma de exponenciao, pois assim fica fcil realizar a raiz de outros nmeros. Por exemplo,
a raiz cbica de 9:
1
2
9^(1/2)
[1] 3
Logaritmo
O logaritmo tambm uma operao que o R realiza atravs de funes, que no caso a funo
log(). Esta funo possui um parmetro opcional que a base. Quando nada informado, a base
automaticamente definida como nmero de euller, retornando portanto o logaritmo natural.
1
2
Operadores matemticos
1
2
1
2
23
[1] 1
[1] 3
Veja que passamos pelos principais operadores matemticos. claro que os exemplos aqui descritos
so simples e servem para voc aprender a como cham-los no R.
Agora voc capaz de combin-los e formar clculos imensos e complexos! Qual o resultado
de: 10%%339 - 100 + 1250/23 * 78 + (10 * 12/33 )
Operadores lgicos
Os operadores lgicos so utilizados para verificar se uma relao verdadeira ou falsa. Assim em
funo da condio estabelecida, o R retorna TRUE (verdadeiro) ou FALSE (Falso). O uso isolado dos
operadores lgicos no faz muito sentido e geralmente so estruturas utilizadas para a construo
de filtros para matriz e dataframes e para construo da estrutura if.
A estrutura if usada para definir uma ao em funo do resultado do operador lgico. Por
exemplo, se a idade de uma rvore for maior que 2 metros, calcula-se o volume da mesma, caso
a altura da rvore seja inferior a 2, atribui-se o valor 0 para volume. Veremos a estrutura if com
mais profundidade ao final deste captulo, mas a ttulo de ilustrao, vamos ver como ficaria o script
do exemplo acima:
1
2
3
Voltando aos operadores lgicos, vamos ver como a sintaxe das seguintes relaes:
Igualdade
1
2
3
a = 10
b = 14
c = 10
1
2
a == b
[1] FALSE
1
2
a == c
[1] TRUE
Diferente
24
Operadores lgicos
1
2
3
d = c(1, 4, 2, 6)
e = 14
f = 4
1
2
length(d) != e
[1] TRUE
1
2
length(d) != f
[1] FALSE
Maior
1
2
3
g = c(1, 1, 1, 1)
h = 14
i = c(8, 3, 1, 2)
1
2
length(g) > h
[1] FALSE
1
2
h > length(i)
[1] TRUE
1
2
1
2
3
g = c(1, 1, 1, 1)
h = 14
i = c(8, 3, 1, 2)
25
Operadores lgicos
1
2
length(g) >= h
[1] FALSE
1
2
h >= length(i)
[1] TRUE
1
2
1
2
3
a = 1/2
b = 14
c = 0.5
1
2
a < b
[1] TRUE
1
2
b < c
[1] FALSE
1
2
a < c
[1] FALSE
Menor ou igual
1
2
3
a = 1/2
b = 14
c = 0.5
26
Operadores lgicos
1
2
a <= b
[1] TRUE
1
2
b <= c
[1] FALSE
1
2
a <= c
[1] TRUE
27
O operador lgico muito til o operador estar contido. Por exemplo, voc pode querer verificar
se um determinado nmero est contido num determinado vetor. Vejamos um exemplo:
1
2
3
4
As condies podem ser conferidas combinando duas ou mais operaes lgicas. O conector E, cujo
smbolo &, verifica se as duas condies so atendidas simultaneamente:
1
2
3
4
5
6
7
a = 10
b = 20
c = 100
a == c/10 & b == a/2
[1] FALSE
a == c/10 & a == b/2
[1] TRUE
O conector OU, cujo smbolo |, verifica se pelo menos uma das condies atendida:
1
2
3
a = 10
b = 20
c = 100
1
2
a == c/10 | b == a/2
[1] TRUE
Operadores lgicos
1
2
28
a == c/10 | a == b/2
[1] TRUE
Agora, que entendemos melhor como funcionam os operadores lgicos, podemos avanar nas
construes de condicionantes (funo if ). A funo if muito utilizada quando dentro do cdigo
precisamos analisar uma condio e tomar uma deciso de acordo com o resultado desta condio.
Veja o exemplo apresentado no incio deste captulo. Qual o volume se a nossa rvore possui altura
de 10 metros, com dimetro de 0.2 metros (20 centmetros) e um fator de forma de 0.5? Troque as
variveis pelos valores apresentados:
1
2
3
4
5
6
7
8
altura = 10
diametro = 0.2
fatorForma = 0.5
if(altura > 2){
volume = (pi() * (diametro^2) / 40000) * altura * fatorForma} else {
volume = 0}
volume
[1] 0.6283185
Agora vamos aproveitar, e incluir mais uma condio. Imagine agora que rvores com mais de 15
metros tenham um fator de forma de 0.75 e rvores entre 2 e 15 metros tenham fator de forma de
0.5. A nossa condicionante passa a ser:
1
2
3
4
5
Adicionando pacotes
Os usurios podem criar solues e salv-las em forma de pacotes, que por sua vez podem ser
distribudos e adicionados por outros usurios. Os pacotes podem ser construdos integrando outras
linguagens como por exemplo o JAVA, o C e o Fortran.
Para que um pacote seja distribudo pelo repositrio oficial do R, necessrio que ele siga um
padro mnimo de documentao. Uma vez listado no repositrio oficial, o pacote fica disponvel
para download atravs dos espelhos do servidor do CRAN (The Comprehensive R Archive Network).
A instalao de um pacote pode ser feita atravs de um comando especfico ou atravs do menu
de opes do R. O ggplot2, por exemplo, um pacote grfico que pode ser adicionado ao R via
isntalao de pacotes. Assim, para instalarmos este pacote atravs de linha de comando, devemos
digitar no console a linha:
1
install.packages("ggplot2")
No esquea que no comando install.packages() o nome do pacote tem que vir entre aspas.
Na primeira vez que este comando for utilizado, o R ir perguntar de qual espelho o download de
pacotes dever ser feito.
Recomendo que escolha um espelho prximo de onde voc mora, para que o download seja
mais rpido.
No entanto, mesmo que um pacote esteja instalado, ele no fica automaticamente carregado. Para
que sua funcionalidade torne-se disponvel necessrio carregar o pacote sempre que se inicia o R.
Se desejarmos carregar o pacote ggplot2 instalado h pouco, devemos digitar no console o comando:
1
require(ggplot2)
Diferentemente da funo install.packages(), a funo require() no requer que o nome do
pacote seja apresentado entre aspas.
Outra opo utilizar o menu de opes do R, clicando na opo Packages e depois Install
packages(s):
29
30
Adicionando pacotes
Na primeira vez que voc for instalar um pacote, o R ir mostrar uma lista dos servidores do
CRAN disponveis. Escolha uma das opes apresentadas e clique Ok. D preferncia por servidores
prximos de voc.
31
Adicionando pacotes
Aps escolher o servidor, aparecer uma nova lista contendo os pacotes disponveis para instalao.
Escolha um ou mais e clique Ok.
32
Adicionando pacotes
RStudio
O RStudio um ambiente de desenvolvimento integrado para tornar a vida do usurio do R mais
poderosa e produtiva. Ele gratuito, cdigo aberto e trabalha nas plataformas Windows, Mac e
Linux.
A instalao do RStudio muito simples. Ao acessar a pgina http://www.rstudio.com/products/RStudio/#Desk,
escolha a opo que melhor se ajusta ao seu sistema operacional. Baixe o instalador e siga as
orientaes do assistente de instalao.
Vale lembrar que primeiro voc precisa instalar o R. E em seguida instale o RStudio.
Pode ser necessrio possuir a licena de administrador para que o R consiga associar corretamente
sua extenso na configurao interna do seu sistema operacional. Quando se trabalha no RStudio,
no necessrio abrir o R, pois o RStudio j comunica automaticamente com ele.
Tudo que voc faz no RStudio, voc capaz de fazer diretamente no R. Assim, voc deve estar
se perguntando: por que ento utilizar o RStudio? A resposta : porque a interface grfica mais
amigvel e organizada, facilitando o seu dia-a-dia. De qualquer maneira, gosto no se discute. Utilize
aquele que lhe proporcionar mais conforto.
Logo RStudio
Vamos conhecer ento, um pouco mais do ambiente do RStudio. Ao abrir o RStudio pela primeira vez,
clicando no cone semelhante figura acima, voc estar utilizando uma interface grfica composta
de 3 janelas:
33
34
RStudio
Na janela da esquerda voc est vendo o console, que possui a mesma funo do console do R.
Ou seja, nele onde os comandos so processados. O console do RStudio apresenta a verso do R
instalada em seu computador.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
35
RStudio
Na janela superior direita, voc encontra duas abas: o Environment (Ambiente) o History (histrico).
A aba Environment mostra todas as variveis que esto criadas e armazenadas na memria flutuante
do seu computador. Esta memria flutuante tambm conhecida como memria RAM. Assim, o seu
computador pode apresentar lentido, ou at mesmo travar se suas variveis ocuparem um espao
superior memria RAM disponvel.
A aba History armazena todas as linhas que foram processadas no seu console. Assim, voc pode
facilmente recuperar uma linha ou comando processado anteriormente.
Na janela inferior direita voc encontra cinco abas: Files (arquivos), Plots (grficos), Packages
(Pacotes), Help (Ajuda) e Viewer (Visualizador). Por hora, precisamos saber que o Files ir mostrar
todos os arquivos e pastas presentes no meu Workspace (Espao de trabalho veremos mais sobre
ele no prximo captulo). As abas Plots e Viewer servem para visualizarmos os resultados grficos
das nossas anlises. Ao longo deste livro, utilizaremos apenas a aba Plots. Na aba Packages podemos
gerenciar os pacotes disponveis para o R, instalando, ativando e removendo pacotes. Por fim, a aba
Help permite acessar a documentao dos pacotes e funes, para consultar a sintaxe, explicaes e
exemplos de uso.
Tambm muito comum utilizarmos a interface do RStudio com 4 janelas. Neste caso, o console
passa a ocupar a janela inferior esquerda, e o script passa a ocupar a janela superior esquerda.
O uso do script e console dento do RStudio idntico ao que vimos no captulo Sobre o R. Assim,
se ficou alguma dvida, faa uma releitura do captulo, s que agora realizando os exemplos no
RStudio.
36
RStudio
De agora em diante, os exemplos sero conduzidos no RStudio, mas nada impede que voc
realize suas anlises diretamente no R.
Espao de trabalho
Neste momento, voc j teve um primeiro contato com a linguagem R e deve estar ansioso para
utiliz-la no dia-a-dia. Nos prximos captulos, colocaremos a mo na massa para conduzir uma
sequncia de anlises grficas e exploratrias.
Ao abrir o RStudio pela primeira vez, note que no canto superior esquerdo haver cone informando
que no h um espao de trabalho aberto (Project: None):
Assim, acostume-se a sempre realizar uma das duas alternativas abaixo: * Ou abrir um espao de
trabalho j existente (Open Project) * Ou criar um novo espao de trabalho (New Project)
Novo projeto
A regra geral : opte por criar um novo espao de trabalho, sempre que voc for iniciar uma anlise.
Opte por abrir um espao de trabalho j existente quando voc quiser continuar ou modificar uma
anlise anteriormente realizada. Para entender melhor as opes relacionadas ao espao de trabalho,
vamos nos basear em trs cenrios diferentes.
Cenrio 1. Imagine que queremos fazer a anlise estatstica de um experimento no R. Os dados
coletados deste experimento esto digitados dentro de um arquivo Excel, salvo numa pasta chamada
Experimento 1 (diretrio: C:Users\egorgensDocumentsAnalisesExperimento 1):
37
38
Espao de trabalho
rvore de arquivos
Neste exemplo j temos um diretrio criado no computador contendo o arquivo que queremos
analisar. Desta forma, ao abrir o RStudio, basta avisarmos para o programa que nosso espao de
trabalho o diretrio no qual os dados esto salvos. Os passos seriam:
1. Clique na lista suspensa ao lado do Project: (None).
2. Clique em New Project.
Novo projeto
39
Espao de trabalho
Diretrio existente
Criar projeto
Perceba agora, que o espao de trabalho est definido e amarrado ao diretrio do Experimento 1.
40
Espao de trabalho
Cenrio 2. Imagine agora que queremos fazer a anlise estatstica de um segundo experimento no
R. Os dados coletados deste experimento acabaram de chegar por email e ainda no esto salvos
numa pasta de trabalho. Assim, desejamos criar uma pasta para o Experimento 2 e ao mesmo tempo
amarrar o espao de trabalho a esta pasta criada. Os passos seriam:
1. Clique na lista suspensa ao lado do Project: (None).
2. Clique em New Project.
Novo projeto
41
Espao de trabalho
Novo diretrio
Projeto vazio
1. D o nome do diretrio a ser criado e o local do seu computador onde este diretrio ficar
salvo. Finalize a criao clicando em Create Project.
42
Espao de trabalho
Criar projeto
Perceba agora, que o espao de trabalho est definido e amarrado ao diretrio do Experimento 2.
Toda vez que o RStudio for iniciado, ser exibido o ltimo espao de trabalho salvo.
Cenrio 3. Agora, suponha que voc deseja continuar a anlise do Experimento 1. Mas o espao de
trabalho ativo o experimento 2. Neste caso, basta:
1. Clique na lista suspensa ao lado do Experimento 1, no canto superior direito.
2. Clique em Open Project.
43
Espao de trabalho
Importando dados
Grande parte dos dados que utilizaremos em nossas anlises estaro salvos em planilhas eletrnicas
como Excel, LibreOffice e outros. Embora seja possvel importar arquivos com extenso xls e xlsx,
recomendo que seja utilizado sempre a extenso genrica csv (comma-separeted value). Todo arquivo
do tipo csv possui dois elementos bsicos que podem influenciar na importao:
o separador decimal
a tabulao (ou separador de colunas)
No formato regional brasileiro, o separador decimal a vrgula (,) e o separador de coluna o ponto
e vrgula (;). J no formato americano, utiliza-se o ponto (.) como separador decimal e a vrgula (,)
como separador de colunas.
Durante a importao de uma planilha eletrnica, pode ser necessrio informar qual o separador
decimal e qual o separador de colunas utilizados no arquivo, para que a leitura dos dados pelo R
ocorra sem problemas.
Dois comandos podem ser utilizados para importar os dados:
1
2
Ambos comandos possuem os parmetros que definem o separador de colunas e o separador decimal:
sep para separador de colunas e dec para separador decimal.
Faa
o
download
do
arquivo
http://gorgens.wix.com/compr#!blank/tz1v5
csv
que
iremos
importar
em:
Vamos importar o arquivo? Se o separador de colunas e o separador decimal do seu arquivo estiver de
acordo com as configuraes regionais de seu computador e o arquivo a ser importado salvo dentro
do diretrio vinculado ao espao de trabalho (workspace), possvel utilizar a verso simplificada
dos importadores:
1
df = read.csv("flowering.csv")
No caso dos separadores estarem de acordo com as configuraes regionais, mas o arquivo a ser
importado no estiver dentro do diretrio vinculado ao workspace necessrio informar o caminho
completo antes do nome do arquivo:
44
Importando dados
45
df = read.csv("C:/Users/Gorgens/Documents/Analises/Experimento 1/flowering.csv")
Se voc no tem certeza quanto aos separadores utilizados na planilha a ser importada,
defina os parmetros!
Por exemplo, o arquivo exemplo possui separador de colunas ;, assim construmos o comando de
importao como:
1
O nome df um nome arbitrrio para a varivel que ir armazenar os dados que estamos
importando.
Inspecione o objeto que recebeu os dados importados para garantir que no houve problemas com
o separador decimal, nem com o separador de colunas. Diversos comandos podem ser usados para
investigar os dados. Veja alguns exemplos:
Veja se o nmero de linhas e colunas correspondem planilha eletrnica importada:
1
dim(df)
Confira se as primeiras linhas dos dados importados correspondem s primeiras linhas do
arquivo original:
head(df)
Voc tambm pode conferir as ltimas linhas dos dados importados atravs do comando:
tail(df)
Veja o sumrio estatsticos dos dados e veja se as colunas de nmeros e textos foram
corretamente importados:
Importando dados
summary(df)
46
Dataframe
Dataframe o objeto do R usado para armazenar dados dispostos em forma de tabela. Na prtica, o
dataframe um conjunto de vetores combinados lado a lado nas colunas. Ao contrrio das matrizes,
as colunas de um dataframe podem ser de tipos diferentes.
Vamos importar um dataframe utilizando o comando que aprendemos no captulo anterior. No
entanto, vamos utilizar um separador decimal sabidamente errado para ilustrarmos a importncia
de avaliarmos a qualidade da importao
1
Agora, veja os resultados dos comandos dim() e head(). O que voc acha que deu errado?
1
1
2
dim(df)
1
2
3
4
5
6
7
8
head(df)
[1] 3124
1
2
3
4
5
6
Nome.Origem.MesFlorescimento.Fases
Abies alba Mill.;nativa;2;0
Acer campestre L.;nativa;2;0
Acer monspessulanum L.;nativa;2;0
Acer opalus Mill.;nativa;2;0
Acer platanoides L.;nativa;2;0
Acer pseudoplatanus L.;nativa;1;0
Esta fcil. O separador de colunas , no funcionou. Veja que a dimenso do dataframe importado
de 3124 linhas e 1 coluna. Mas nosso arquivo original possui 4 colunas. O comando head() nos d a
pista do separador correto. Veja que entre nossas colunas originais apareceu um ;. Veja a diferena
se utilizarmos o separador de colunas correto:
1
48
Dataframe
1
2
dim(df)
1
2
3
4
5
6
7
8
head(df)
[1] 3114
Nome
1
Abies alba Mill.
2
Acer campestre L.
3 Acer monspessulanum L.
4
Acer opalus Mill.
5
Acer platanoides L.
6 Acer pseudoplatanus L.
nativa
nativa
nativa
nativa
nativa
nativa
Origem
2
2
2
2
2
1
MesFlorescimento Fases
0
0
0
0
0
0
No script abaixo esto listadas e comentadas as principais funes para trabalhar com dataframes:
1
nmero de colunas
O acesso a elementos, linhas e colunas de um dataframe pode ser realizado da mesma maneira que
as matrizes utilizando a notao de [ ] logo aps o nome do dataframe que se deseja manipular.
Execute as linhas do script abaixo no seu console. Todas as linhas foram construdas
considerando o dataframe df que criamos a pouco: df[1,1] df[1,] df[,2] df[100:200, 3]
Alm da notao de [ ] existem uma notao alternativa para selecionar colunas de um dataframe:
a notao de $. Assim, a seleo da coluna 2 pode ser feita de duas maneiras:
49
Dataframe
1
2
# notao de [ ]
1
2
# notao de $
df[,2]
df$Origem
Imagine que desejamos transformar os dados da coluna MesFlorescimento tirando a raiz quadrada
dos valores e salvar numa nova coluna chamada FlorTrans. Podemos fcil realizar esta operao
atravs do comando:
1
df$FlorTrans = sqrt(df$MesFlorescimento)
Se visualizarmos os nomes das colunas do dataframe df, veremos que agora temos 5 colunas e uma
delas chama-se FlorTrans:
1
2
3
names(df)
[1] "Nome"
[4] "Fases"
Origem"
"FlorTrans"
"MesFlorescimento"
Atravs da funo summary(), podemos obter um resumo estatstico das colunas do dataframe:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
summary(df)
Nome
nativa:2487
exotica: 627
Origem
MesFlorescimento
Min.
: 1.000
1st Qu.: 2.000
Median : 3.000
Mean
: 2.811
3rd Qu.: 3.000
Max.
:12.000
50
Dataframe
Interpretando a sada acima, vemos que a primeira coluna formada por nomes de espcies
diferentes, pois o resumo apresentou quantas vezes os 6 primeiros nomes apareceram e todos eles
apareceram uma nica vez.
A segunda coluna tambm texto, e indica se as espcies levantadas so nativas (nativa) ou exticas
(exotica). No nosso dataframe temos 2487 observaes nativas e 627 observaes exticas.
As colunas trs, quatro e cinco so numricas e por isto as principais estatsticas descritivas de
posio so apresentadas.
Suponha agora, que desejamos dividir o dataframe em dois. Um contendo apenas as observaes
exticas (627) e outro contendo apenas as observaes nativas (2487). Uma alternativa utilizarmos
a notao j aprendida de [ ]:
1
ex = df[df$Origem == exotica,]
Interpretando o comando acima literalmente, solicitamos que se crie um novo dataframe chamado
ex com as linhas do dataframe df que contenham na coluna Origem o valor exotica.
Outra opo para realizar a mesma tarefa a funo subset(). E o comando ficaria assim:
1
Ambos os comandos retornam um dataframe contendo apenas as observaes exticas dos nossos
dados.
Voc consegue criar o comando para agora criar um dataframe apenas com os dados das
observaes de nativas?
in = df[df$Origem == nativa,]
Ou:
Vamos explorar agora as funes grficas bsicas relacionados funo plot() e seus derivados como
boxplot() e histogram(). Estas funes so nativas do R, isto , no necessitam de instalao nem de
ativao. J esto prontamente disponveis desde a instalao.
Grfico de disperso.
Os grficos de disperso so representaes de duas ou mais variveis em um grfico de pontos, no
qual uma varivel est disposta em funo da outra. Ele muito utilizado para correlacionar dados e
estudar o efeito de uma varivel (X) sobre a outra (Y). Os grficos de disperso podem ser facilmente
criados pela funo plot() utilizando duas sintaxes diferentes. Numas das sintaxes iremos informar
quem ser a varivel X seguido de quem ser a varivel Y:
1
plot(arvores$dap, arvores$altura)
Traduzindo literalmente o comando acima, solicitamos que seja construdo um grfico de disperso
em que o eixo X represente o dap e o eixo Y represente a altura. Aps processar o comando, o grfico
ir aparecer na aba Plots (lateral inferior direita) do RStudio:
51
52
Grfico de disperso
O mesmo grfico ser criado, se utilizarmos a notao de funo. Imagine um comando que crie um
grfico de disperso da altura em funo do dap (dimetro a altura do peito). Esta sentena pode ser
escrita pelo comando:
1
O resultado o mesmo, com uma pequena diferena nos rtulos dos eixos:
53
Diversos parmetros podem ser usados para customizar o nosso grfico, como por exemplo:
Parmetro
Ao
xlab
ylab
xlim
ylim
main
pch
Inmeros outros parmetros podem ser utilizados. Os que esto apresentados na tabela so os mais
utilizados. Vejamos um script contendo um exemplo da funo plot() com todos os parmetros
mencionados acima:
1
2
3
4
54
Curvas de regresso, tambm conhecidas como linhas de tendncia podem ser adicionadas aos
grficos de disperso para melhor representao da relao entre as duas variveis. A funo abline()
capaz de incluir num grfico de disperso qualquer linha de tendncia linear. Veja o exemplo:
1
2
Note que primeiro precisamos criar o grfico de disperso e depois adicionamos a linha de tendncia
baseada numa regresso linear (funo lm()). O resultado :
55
Boxplot
O boxplot ou diagrama de caixa uma representao para explorar um conjunto de dados
organizados em fatores. Assim o eixo X categrico e representa os fatores e o eixo Y representa
a varivel dependente dos fatores. Este grfico mostra a variao de uma varivel dentro de cada
fator atravs das seguintes estatsticas: mediana, 1 e 2 quartil, mximo e mnimo. Crie o boxplot:
1
Veja que com o comando acima, solicitamos que um boxplot seja criado, avaliando a varivel altura
dentro de cada fator presente na varivel categoria. O resultado do comando acima :
56
A funo boxplot() est sujeita aos mesmos parmetros da funo plot() vistos anteriormente.
Outros parmetros tambm podem ser utilizados de acordo com a convenincia do usurio. Mais
informaes no help da funo que pode ser acesso via console digitando:
1
?boxplot.
Histograma
O histograma representa a distribuio de frequncias ao longo da amplitude de ocorrncia das
observaes. Os dados so agrupados em classes e a altura da coluna da respectiva classe representa
a frequncia com que esta classe est presente nos dados. O histograma da altura pode ser criado
pelo comando:
1
hist(arvores$altura)
57
Histograma
Vrios parmetros podem ser usados na funo hist(). Um exemplo o parmetro freq=FALSE que
pode ser usado quando desejamos que ao invs da frequncia seja apresentada a densidade de cada
classe.
1
hist(arvores$altura, freq=FALSE)
Outro parmetro interessante o breaks, que define a quantidade de quebras que sero considerados
durante a criao do histograma.
1
hist(arvores$altura, breaks=3)
O resultado assim, um menor nmero de colunas, j que os dados sero separados apenas por trs
quebras:
58
Para maiores informaes sobre os parmetros, recorra ao help da funo, que pode ser acessado
pelo console atravs do comando ?hist.
Existem outras opes de grficos bsicos. Seguem algumas sugestes de leitura:
http://www.statmethods.net/graphs/creating.html
http://ecologia.ib.usp.br/bie5782/doku.php?id=bie5782:03_apostila:05a-graficos
Looping WHILE
Estrutura de repetio while uma estrutura de desvio do fluxo presente em linguagens de
programao que repete um determinado algoritmo enquanto uma condio se mantiver verdadeira.
Esto associados estrutura de repetio while uma condio e um bloco de cdigo. Aps o final
da execuo do bloco, a condio verificada, e caso ela ainda seja verdadeira, o bloco de cdigo
executado novamente. O objetivo do looping while repetir uma determinada tarefa at que uma
condio no seja mais atendida.
O looping while construdo a partir da sentena genrica:
1
2
3
4
5
while (condio) {
Bloco de cdigo
}
A sentena acima diz ao R que ir comear um looping while, executando um bloco de cdigo at
que a condio deixe de ser atendida.
Vamos criar um looping while a partir da mesma base de dados do captulo anterior:
1
2
3
4
Nosso objetivo ser calcular a rea basal das rvores rotuladas como pequena. Lembrando que a
rea basal ser a soma das reas seccionais.
Embora o looping while no seja a melhor soluo para este problema, vamos implement-lo para
praticar:
59
Looping WHILE
1
2
3
4
5
6
7
8
60
AB = 0
arvore = 1
rotulo = arvores$categoria[arvore]
while (rotulo == "pequena"){
AB = AB + ((arvores[arvore, 2]^2 * pi)/40000)
arvore = arvore + 1
rotulo = arvores$categoria[arvore]
}
A condio que a rvore que estiver sendo analisada contenha rtulo pequena, ou seja
1
rotulo == "pequena"
Enquanto esta condio for verdadeira, o R executar o bloco de cdigo que est escrito entre as {}:
1
2
3
O bloco de cdigo comea calculando a rea seccional da arvore 1 e acrescenta o valor calculado
na varivel AB. Em seguida o atualiza o ndice da rvore em 1, passando para a rvore seguinte
do dataframe. Finalmente a terceira linha do bloco de cdigo atualiza a varivel rtulo para
corresponder nova rvore.
Como o R chegou ao final do bloco de cdigo, ele volta a testar a condio. Se a condio continuar
verdadeira, o R permanece no looping. Caso contrrio, o R sai do looping e termina o cdigo.
Vale destacar que esta soluo no facilmente aplicada s rvores rotuladas como grande.
Voc consegue perceber porque?
Aqui vale um alerta. O looping while no muito simples de se construir e um erro pode facilmente
levar a um looping perptuo. Isto , a condio sempre verdadeira e portanto, o looping while nunca
ir terminar. Esta a razo de se preferir o looping for.
Looping FOR
Estrutura de repetio for uma estrutura de desvio do fluxo presente em linguagens de programao
que repete um determinado algoritmo para os elementos de um conjunto determinado pela condio.
Esto associados estrutura de repetio for uma condio e um bloco de cdigo. Mas ao contrrio
do looping while, a condio aqui serve para definir os elementos de um conjunto sobre os quais o
bloco de cdigo ser executado.
Aps o final da execuo do bloco, se ainda houver elementos no conjunto o bloco de cdigo
executado novamente. O objetivo do looping for repetir uma determinada tarefa at que todos os
elementos definidos pela condio tenham sido processados.
O looping for construdo a partir da sentena genrica:
1
2
3
for (condio) {
Bloco de cdigo
}
Vamos criar um looping for a partir da mesma base de dados que estamos utilizando nos ltimos
captulos:
1
2
3
4
Nosso objetivo ser calcular o volume das rvores grandes. Para isto, vamos filtrar no dataframe as
linhas rotuladas como grande. Sobre cada linha filtrada, iremos realizar o clculo do volume. Vamos
construir o script utilizando o looping for?
61
62
Looping FOR
1
2
3
4
5
6
O resultado do cdigo acima uma nova coluna no dataframe arv.filtrada, contendo o volume de
cada rvore rotulada como grande.
Esta linha de comando filtra as observaes do dataframe original arvores que contem a string
grande nas linhas da coluna categoria. Estas observaes so ento salvas num novo dataframe
chamado arv.filtrada.
Veja a segunda linha:
1
Famlia APPLY
No R, por usar uma linguagem vetorial, os loopings tradicionais, quando possvel, devem ser
substitudos pelas funes da famlia apply.
Alm da funo apply() propriamente dita, esto disponveis as funes: sapply(), tapply() e lapply()
para implementar clculos de forma mais eficiente.
Na base de dados que estamos trabalhando nos ltimos captulos temos duas colunas interessantes,
a altura e o dap (dimetro a altura do peito). Desejamos calcular a mdia dessas colunas. Assim,
usaremos a funo apply para aplicar funo mean() (funo para o calculo da mdia) sobre as
colunas do dataframe:
1
apply(arvores[,1:2], 2, mean)
A funo apply() pede trs elementos. O primeiro termo: arvores[, 1:2] indica que estaremos
utilizando as colunas 1 e 2 do dataframe, que corresponde s colunas altura e dap respectivamente.
O segundo termo: 2 indica que desejamos aplicar a funo sobre as colunas. Se utilizarmos o valor
1, a funo seria aplicada sobre as linhas do dataframe.
O terceiro termo, mean(), indica que a funo a ser aplicada em cada coluna a mdia.
Prontamente o R capaz de calcular a mdia das colunas altura e dap, apresentando o resultado no
console:
1
2
3
apply(arvores[,1:2], 2, mean)
altura
dap
30.08333 41.25000
Lembre-se que sempre podemos salvar os resultados de uma funo em uma varivel.
1
O resultado desta linha uma varivel denominada medias contendo as mdias das colunas altura
e dap.
As funes da famlia apply, em resumo, executam um looping sobre as linhas ou sobre as colunas.
As funes sapply() e lapply() so variantes.
A sapply() executa uma determinada funo sobre um vetor de elementos.
63
Famlia APPLY
1
2
64
sapply(1:3, sqrt)
[1] 1.000000 1.414214 1.732051
A lapply() realiza operao similar ao sapply() s que a sada estruturada como lista:
1
2
3
4
5
6
7
8
9
lapply(1:3, sqrt)
[[1]]
[1] 1
[[2]]
[1] 1.414214
[[3]]
[1] 1.732051
Sempre que possvel, utilize as funes da famlia apply. Elas so otimizadas para o R, o que a tornam
bem mais eficientes que a estrutura convencional for e while.
Funes
Criar uma funo significa encapsular um pedao de cdigo e atribuir um nome para que este pedao
de cdigo possa ser reutilizado a qualquer momento.
Uma funo pode contar com parmetros que modificam sua forma de atuao de acordo com o valor
que ele assume. As funes uma vez criadas podem ser requisitadas pelo programador a qualquer
momento dentro do cdigo, ou at mesmo dentro de outra funo.
Os pacotes nada mais so que uma srie de funes que aps instalados e ativados passam a fazer
parte do seu ambiente de trabalho.
Para calcular uma raiz quadrada, por exemplo, utilizamos uma funo denominada de sqrt(). Esta
funo possui um bloco de cdigo que ser chamado toda vez que digitarmos sqrt().
1
2
sqrt(9)
[1] 3
A funo sqrt() exige um parmetro obrigatrio, denominado x, que deve ser sempre um vetor
numrico. A funo com seus parmetros chamamos de sintaxe. Assim, a sintaxe completa dda
funo sqrt() sqrt(x).
Ao longo do livro, aprendemos a utilizar uma srie de funes. Algumas j prontamente disponvel
no R e outras adicionadas via pacotes. Tambm possvel criar uma funo.
Vamos criar uma funo que calcule o dimetro (em centmetro) de uma rvore a partir de uma
idade conhecida (em anos).
A melhor forma para se criar uma funo digitar sua estrutura num script e process-lo para
deixar a funo disponvel no ambiente de trabalho. Vejamos o script da nossa funo para calcular
o dimetro:
1
2
3
Nossa funo se chamar estimarDiametro() e ter quatro parmetros, todos obrigatrios: o nmero
ou vetor numrico x e os parmetros da funo sigmoidal de Richard a, b e c. Dentro dos {} temos
o bloco de cdigo que ser aplicado toda vez que chamarmos a funo estimarDiametro(). No caso,
o bloco de cdigo ser a funo de Richard com parmetros a, b e c, aplicado a uma varivel
independente x.
65
66
Funes
Depois de rodar o script acima, nossa funo passa a fazer parte do espao de trabalho (veja no canto
superior direito, na janela environment).
Uma vez no espao de trabalho, nossa funo est disponvel para ser chamada no console ou em
novos scripts. Vamos fazer o teste? Calcule o dimetro de uma rvore aos 10 anos de idade, e cujos
parmetros do modelo de Richard so: a = 15.18, b = 0.33 e c = 0.98.
1
2
Sua funo deve ter trs parmetros obrigatrios e deve ter sido construda assim:
1
2
3
Rode o script para criar a funo volume em seu ambiente de trabalho. Confira se implementou
corretamente a funo, calculando o volume de uma rvore com 50 cm de dimetro, 42 metros de
altura e um fator de forma 1.5. Seu resultado deve ser igual a 5.497787 m.
Suponha que voc no tem o dimetro da rvore, mas sabe que a rvore possui 6 anos e
22 metros de altura. Voc tambm sabe que os coeficientes do modelo de Richard para o
crescimento do dimetro desta espcie so: a = 15.18, b = 0.33 e c = 0.98. Como voc poderia
utilizar as duas funes criadas aqui neste captulo?
Prximos passos
Ao longo deste livro voc aprendeu uma srie de comandos que iro ajud-lo a utilizar o R no
dia a dia de suas anlises. Esse livro no uma receita. Ele tem a pretenso de ajudar voc a se
tornar independente no uso do R. Isto no significa que voc no precisa mais procurar ajuda,
ou conversar com um colega programador mais experiente. A independncia significa que voc
consegue se expressar e pensar na nova lngua que voc acabou de aprender: a linguagem R. Espero
que voc seja capaz de decidir por exemplo, quando utilizar um looping; a diferenciar entre situaes
de looping while e looping for; a detectar quando uma importao de csv deu errado e no que voc
errou ao importar os dados, e por a vai
Quando voc comear a trabalhar com o R, muitas dificuldades iro surgir. A primeira anlise que
voc for implantar no R, voc ir demorar um dia todo! Mas no se assuste. A demora vem da falta de
fluncia. Na segunda vez que voc implantar uma anlise no R, j notar uma sensvel melhora no
seu desempenho. E assim sucessivamente at que se sinta absolutamente seguro no desenvolvimento
de cdigos para o R.
Quando voc esbarrar numa dificuldade, no se desespere nem desanime. Voc tem duas sadas:
pergunte a um amigo que j usa o R, ou pergunte ao Google. Isto mesmo! Digite sua dvida no
portal de pesquisas na internet. Por exemplo:
Como salvar um dataframe no r?
Como remover uma coluna do dataframe no r?
Depois de algumas perguntas, voc ver que grande parte das respostas sempre vem dos mesmos
sites vou deixar uma lista de sites especialmente interessantes, ok?
http://stackoverflow.com/
http://pt.stackoverflow.com/
http://www.statmethods.net
http://ridiculas.wordpress.com
67
Agradecimentos
Agradeo ao amigo Professor Mrcio Romarco de Oliveira pelo primeiro convite para que eu
ministrasse um curso sobre o R.
Agradeo amiga Danitiele Cristina Frana Laranja pela pacincia em testar os comandos e
exemplos apresentados ao longo do livro.
Agradeo ao amigo Andr Gracioso Peres da Silva pela parceria de sucesso nas construes de
inmeras solues baseadas em R.
Agradeo ao amigo e orientador Luiz Carlos Estraviz Rodriguez pelo convite para fazer doutorado,
que resultou no tempo e ambiente necessrio para novos aprendizados.
Um agradecimento especial para Jacy (minha me) e para Roberto (meu sogro) por lerem e testarem
a compreenso do livro.
Agradeo minha famlia pelo apoio: Jacy, Robert, Diana, Ellie, Roberto e Tnia.
Agradeo ao meu anjo: Pollyanna.
68