Vous êtes sur la page 1sur 72

Computao em R

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

Pacote grfico bsico . .


Grfico de disperso.
Boxplot . . . . . . . .
Histograma . . . . . .

.
.
.
.

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

R version 3.0.2 (2013-09-25) -- "Frisbee Sailing"


Copyright (C) 2013 The R Foundation for Statistical Computing
Platform: x86_64-w64-mingw32/x64 (64-bit)
R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.
Natural language support but running in an English locale
R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Sobre o R

14
15
16
17
18
19

Type 'demo()' for some demos, 'help()' for on-line help, or


'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.
>

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 +
+

Ao digitarmos 5, o termo faltante e pressionar enter, o consegue interpretar e executar a soma


solicitada:

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)

Agora sim, ao pressionarmos a tecla enter, o console exibir:

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

Veja que quando o console est ativado, a barra de ferramentas igual a:

Barra de tarefas com console ativado

Por outro lado, quando o R Editor est ativado, a barra de ferramentas muda:

Barra de tarefas com o editor ativado

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:

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.

Comando run line

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:

Outro comando run line

O R trabalha com padro internacional de separao decimal e separao de colunas. A


separao decimal . (ponto). E a separao de coluna , (vrgula).

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!

A partir de agora no utilizaremos mais a notao de linha ativa >.

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

A varivel a ser automaticamente definida pelo R como um vetor numrico.


O principal atributo de uma estrutura do tipo vetor o comprimento. O vetor a, por exemplo, um
vetor de comprimento um, ou seja, contm apenas um elemento. Isto pode ser comprovado atravs
do seguinte comando:

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

m1 = matrix(c(2, 4, 3, 1, 5, 7), nrow = 2, ncol = 3, byrow = TRUE)

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

[,1] [,2] [,3]


4
3
5
7

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

m2 = matrix(c(2, 4, 3, 1, 5, 7), nrow = 2, ncol = 3, byrow = FALSE)

1
2
3
4

m2
[1,]
[2,]

[,1] [,2] [,3]


2
3
5
4
1
7

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

mpg cyl disp hp drat


110 3.90 2.620 16.46 0
110 3.90 2.875 17.02 0
93 3.85 2.320 18.61 1
110 3.08 3.215 19.44 1
175 3.15 3.440 17.02 0
105 2.76 3.460 20.22 1

1
1
1
0
0
0

wt qsec vs am gear carb


4
4
4
4
4
1
3
1
3
2
3
1

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

# retorna o nome das colunas do dataframe


names(mtcars)

1
2

# retorna um resumo estatstico das colunas do dataframe


summary(mtcars)

1
2

# retorna as 6 ltimas linhas do dataframe


tail(mtcars)
No script acima aproveitamos para apresentar a sinalizao de comentrio. Toda linha no R iniciada
com o # no interpretada pelo console. Assim, o smbolo # usado para incluirmos comentrios
em nosso cdigo. Veja que no script, cada linha iniciada pelo sinal # explica o comando seguinte.
Podemos acessar qualquer registro dentro do dataframe utilizando a mesma notao de matrizes:

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

mpg cyl disp hp drat


wt qsec vs am gear carb
6 160 110 3.9 2.62 16.46 0 1
4
4

Mazda RX4
21.0
Mazda RX4 Wag 21.0
Datsun 710
22.8

6
6
4

mpg cyl disp hp drat


160 110 3.90 2.620 16.46
160 110 3.90 2.875 17.02
108 93 3.85 2.320 18.61

0
0
1

wt
1
1
1

qsec vs am gear carb


4
4
4
4
4
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

mpg cyl disp hp drat


93 3.85 2.320 18.61 1
62 3.69 3.190 20.00 1
95 3.92 3.150 22.90 1
66 4.08 2.200 19.47 1
52 4.93 1.615 18.52 1
65 4.22 1.835 19.90 1
97 3.70 2.465 20.01 1
66 4.08 1.935 18.90 1
91 4.43 2.140 16.70 0
113 3.77 1.513 16.90 1
109 4.11 2.780 18.60 1

1
0
0
1
1
1
0
1
1
1
1

wt qsec vs am gear carb


4
1
4
2
4
2
4
1
4
2
4
1
3
1
4
1
5
2
5
2
4
2

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

mpg cyl disp hp drat


93 3.85 2.320 18.61 1
62 3.69 3.190 20.00 1
95 3.92 3.150 22.90 1
66 4.08 2.200 19.47 1
52 4.93 1.615 18.52 1
65 4.22 1.835 19.90 1
97 3.70 2.465 20.01 1
66 4.08 1.935 18.90 1
91 4.43 2.140 16.70 0
113 3.77 1.513 16.90 1
109 4.11 2.780 18.60 1

1
0
0
1
1
1
0
1
1
1
1

wt qsec vs am gear carb


4
1
4
2
4
2
4
1
4
2
4
1
3
1
4
1
5
2
5
2
4
2

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

subset(mtcars, mtcars$cyl == 4, select = c("mpg", "hp"))

1
2
3
4
5
6
7
8
9
10

mtcars[mtcars$cyl == 4, c(1, 4)]


mpg
Datsun 710
22.8 93
Merc 240D
24.4 62
Merc 230
22.8 95
Fiat 128
32.4 66
Honda Civic
30.4 52
Toyota Corolla 33.9 65
Toyota Corona 21.5 97
Fiat X1-9
27.3 66

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 s usar a imaginao e filtrar os dados como melhor lhe convier!


A ltima estrutura de dados que iremos ver so as listas. Listas funcionam como um varal. Num
varal podemos pendurar vrios tipos de coisas. Voc pode pendurar roupas, quadros, cadeira, fotos
e vrias outras coisas que voc nem imagina. No R, a lista funciona da mesma forma. Voc pode
incluir numa lista diferentes dados e estruturas.
Lembra-se das variveis a e idade que criamos anteriormente? Pois bem, vamos adicion-las
juntamente com o dataframe mtcars a uma lista chamada dados.
1

dados = list(mtcars, a, idade)

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

A diviso e multiplicao tm preferncia sobre a adio e subtrao. Para estabelecer prioridades,


utilize ().
Multiplicao

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

log(10) #base neperiana


[1] 2.302585

Operadores matemticos

1
2

log(10, 10) #notao para logaritmo de 10 na base 10

1
2

log(8, 2) #notao para logaritmo de 8 na base 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

if(altura > 2){


volume = diametro * altura * fatorForma} else {
volume = 0}

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

length(g) > length(i)


[1] FALSE
Maior ou igual

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

length(g) >= length(i)


[1] TRUE
Menor

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

vetor = c(4, 10, 56, 78, 91)


numero = 10
numero %in% vetor
[1] TRUE

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

if(altura >= 15){


volume = (pi * (diametro^2) / 40000) * altura * 0.75} else if ( altura > 2 & al\
tura < 15){
volume = (pi * (diametro^2) / 40000) * altura * 0.5} else {
volume = 0}

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

Menu Install Packages

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

Escolhendo servidores disponveis

Aps escolher o servidor, aparecer uma nova lista contendo os pacotes disponveis para instalao.
Escolha um ou mais e clique Ok.

32

Adicionando pacotes

Escolhendo o pacote a ser instalado

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

Interface RStudio com 3 janelas

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

R version 3.0.1 (2013-05-16) -- "Good Sport"


Copyright (C) 2013 The R Foundation for Statistical Computing
Platform: x86_64-w64-mingw32/x64 (64-bit)
R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.
R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.
Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.
>

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.

Interface RStudio com 4 janelas

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):

Espao de trabalho no definido

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

1. Clique em Existing Directory.

39

Espao de trabalho

Diretrio existente

1. Atravs do boto Browse, selecione o diretrio do Experimento 1 e clique em Create Project.

Criar projeto

Perceba agora, que o espao de trabalho est definido e amarrado ao diretrio do Experimento 1.

40

Espao de trabalho

Espao de trabalho Experimento 1

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

1. Clique em New Directory.

41

Espao de trabalho

Novo diretrio

1. Clique em projeto vazio (Empty Project).

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.

Espao de trabalho 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

Abrir projeto existente

1. Escolha um projeto salvo anteriormente.


Voc conseguir utilizar o RStudio mesmo sem definir o espao de trabalho. No entanto, existem
alguns benefcios quando quando definimos o espao de trabalho:
Toda anlise (tabelas e grficos) quando exportada salva automaticamente na pasta vinculada ao espao de trabalho.
O RStudio enxerga automaticamente os arquivos existentes dentro da pasta sem a necessidade
de informar o endereo completo quando realizar uma manipulao de arquivo (ex: importar
uma planilha).
Tem a opo de salvar o histrico (History) e as variveis armazenadas na memria (Environment).

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

read.csv(arquivo, sep=..., dec=...)


read.table(arquivo, sep=..., dec=...)

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

df = read.csv("flowering.csv", sep = ";")

O nome df um nome arbitrrio para a varivel que ir armazenar os dados que estamos
importando.

Antes de iniciar as anlises com os dados importados, sempre desconfie!

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

df = read.csv("flowering.csv", sep = ",", dec = ".")

Agora, veja os resultados dos comandos dim() e head(). O que voc acha que deu errado?
1

df = read.csv("flowering.csv", sep=",", dec=".")

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

df = read.csv("flowering.csv", sep = ";", dec = ".")

Agora sim, nossa planilha foi importada de forma correta:


47

48

Dataframe

df = read.csv("flowering.csv", sep=";", dec=".")

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

names(df) # Retorna o nome das colunas

dim(df) # Retorna o nmero de linhas seguido do

head(df) # Retorna as 6 primeiras linhas

tail(df) # Retorna as 6 ltimas linhas

nrow(df) # Retorna o nmero de linhas

ncol(df) # Retorna o nmero de colunas

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

Na notao de $, o nome da coluna a ser selecionada vem precedido do nome do dataframe


separado pelo $.

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

Abies alba Mill.


:
1
Acer campestre L.
:
1
Acer monspessulanum L.:
1
Acer negundo L.
:
1
Acer opalus Mill.
:
1
Acer platanoides L.
:
1
(Other)
:3108
Fases
FlorTrans
Min.
:0.000000
Min.
:1.000
1st Qu.:0.000000
1st Qu.:1.414
Median :0.000000
Median :1.732
Mean
:0.007065
Mean
:1.648
3rd Qu.:0.000000
3rd Qu.:1.732
Max.
:2.000000
Max.
:3.464

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

ex = subset(df, Origem == exotica)

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?

A resposta correta seria:


1

in = df[df$Origem == nativa,]
Ou:

in = subset(df, Origem == nativa)

Pacote grfico bsico


Para explorarmos os grficos, vamos criar um dataframe fictcio contendo 12 rvores, 6 pertencentes
a um grupo denominado de pequena e outras 6 pertencentes a um grupo denominado de grande. A
criao de dataframes por meio da digitao direta pode ser feita pela funo data.frame() conforme
nosso script abaixo:
1
2
3

arvores <- data.frame(altura = c(15,18,22,24,25,30,31,34,37,39,41,45),


dap = c(2,4.5,6,10,30,34,50,56,60,77.5,80,85), categoria = rep(c("pequena", "gra\
nde"), each=6))

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

Pacote grfico bsico

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

plot(altura ~ dap, data = arvores)

O resultado o mesmo, com uma pequena diferena nos rtulos dos eixos:

53

Pacote grfico bsico

Grfico de disperso com eixos customizados

Diversos parmetros podem ser usados para customizar o nosso grfico, como por exemplo:
Parmetro

Ao

xlab
ylab
xlim
ylim
main
pch

Altera o rtulo do eixo X


Altera o rtulo do eixo Y
Define os limites do eixo X
Define os limites do eixo Y
Define o ttulo do grfico
Altera forma do marcador

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

plot(altura~dap, data = arvores,


xlab="dap (cm)", ylab="Altura (m)",
xlim=c(0,90), ylim=c(0,90),
main="Altura = f(dap)", pch = 20)

O grfico que criamos com todos estes parmetros opcionais :

54

Pacote grfico bsico

Grfico de disperso com marcadores diferentes

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

plot(altura ~ dap, data = arvores)


abline(lm(altura ~ dap, data = arvores))

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

Pacote grfico bsico

Grfico de disperso com linha de tendncia

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

boxplot(altura~categoria, data = arvores)

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

Pacote grfico bsico

Grfico de caixas, tambm conhecido como boxplot

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)

Como resultado do comando acima, obtivemos um histograma 6 classes e a respectiva frequncia


das observaes:

57

Pacote grfico bsico

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

Pacote grfico bsico

Histograma com nmero de quebras redefinidas

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.

Fluxograma do looping WHILE

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

arvores <- data.frame(altura =


c(15,18,22,24,25,30,31,34,37,39,41,45),
dap = c(2,4.5,6,10,30,34,50,56,60,77.5,80,85),
categoria = rep(c("pequena", "grande"), each=6))

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

AB = AB + ((arvores[arvore, 2]^2 * pi)/40000)


arvore = arvore + 1
rotulo = arvores$categoria[arvore]

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.

Fluxograma do looping FOR

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

arvores <- data.frame(altura =


c(15,18,22,24,25,30,31,34,37,39,41,45),
dap = c(2,4.5,6,10,30,34,50,56,60,77.5,80,85),
categoria = rep(c("pequena", "grande"), each=6))

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

arv.filtrada = arvores[arvores$categoria == "grande", ]

for (i in seq(1, length(arv.filtrada$categoria), 1)) {


arv.filtrada$volume[i] = arv.filtrada$altura[i] * (arv.filtrada$dap[i]/100) / 1\
.5
}

O resultado do cdigo acima uma nova coluna no dataframe arv.filtrada, contendo o volume de
cada rvore rotulada como grande.

Saida resultado do looping FOR

Vamos discutir o que acabamos de fazer? Nosso script comea com:


1

arv.filtrada = arvores[arvores$categoria == "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

for (i in seq(1, length(arv.filtrada$categoria), 1)) {


Vamos analisar a segunda linha de forma bem cuidadosa. Com a palavra for, informamos ao R que
um looping ir comear. Perceba que nosso dataframe arv.filtrada, possui 6 linhas. Esta informao
vem de: length(arv.filtrada$categoria).
Assim, o pedao de cdigo seq(1, length(arv.filtrada$categoria), 1) define um vetor sequncial de
um 1 at 6, com incrementos de 1.
A segunda linha pede portanto, que execute um bloco de cdigo com i variando de 1 a 6, ou seja, o
bloco de cdigo ir ocorrer sobre cada uma das linhas do dataframe arv.filtrada.
O bloco de cdigo bastante simples. Ele pega a altura da rvore armazenada na linha i, mltipla
pelo respectiva rea seccional em metros quadrados e aplica um fator de forma de 1.5. O resultado
ento armazenado na mesma linha i, s que em uma nova coluna chamada volume.
Voc seria capaz de adaptar o cdigo para calcular o volume das rvores pequenas?

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

medias = apply(arvores[,1:2], 2, mean)

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

estimarDiametro <- function(x, a , b, c) {


return((a*(1-exp(-b*x))^c))
}

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

estimarDiametro(10, 15.18, 0.33, 0.98)


[1] 14.63111

Isto mesmo, nossa rvore possui 14.63111 centmetros de dimetro.


Agora um desafio. Crie uma funo chamada volume para calcular o volume de uma rvore
a partir do dimetro, altura e fator de forma. Observao, o dimetro ser informado em
centmetros e a altura em metros.

Sua funo deve ter trs parmetros obrigatrios e deve ter sido construda assim:
1
2
3

volume = function(dap, altura, fator){


return((((dap^2) * pi / 40000) * altura) / fator)
}

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?

Veja uma sugesto:


1
2

volume(est_diametro(6, 15.18, 0.33, 0.98), 22, 1.5)


[1] 0.1983767

Aqui aplicamos uma funo dentro da outra. E a resposta foi 0.1984 m!

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

Tambm tenho disponvel um curso online do R, totalmente gratuito:


http://udemy.com/computacao_r/
Espero que voc se torne um entusiasta do R, assim como eu! No desanime com as dificuldades
iniciais e se lembre que o limite a partir de agora voc!

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