Escolar Documentos
Profissional Documentos
Cultura Documentos
Última atualização
24 de junho de 2013
O criador deste material é Victor Lemes Landeiro (INPA/ Coordenação de Pesquisas Ecológicas) -
vllandeiro@gmail.com
1
Landeiro, Zucco, Menezes e Oliveira-Santos, 2010
2
Landeiro, Zucco, Menezes e Oliveira-Santos, 2010
CONTEÚDO
Para quê aprender a usar o R ......................................................................................................... 5
Nota sobre o uso desta apostila: ..................................................................................................... 6
DIA 1 – PRIMEIRO CONTATO ....................................................................................................... 7
A cara do R e algumas informações básicas: ................................................................................. 7
A sintaxe básica dos comandos de R ......................................................................................... 8
O workspace e o working directory do R (área de trabalho). ...................................................... 8
Pacotes do R ............................................................................................................................... 9
Como usar um pacote do R .................................................................................................... 9
Como citar o R, ou um pacote do R em publicações .............................................................. 9
Usando o R .................................................................................................................................... 10
Demonstrações ......................................................................................................................... 10
O R como calculadora (operadores matemáticos simples) ...................................................... 10
Funções matemáticas do R ....................................................................................................... 11
Acessar o menu de ajuda do R (HELP!!!!) ................................................................................ 12
O help.search (para quando se está bem perdido) ............................................................... 12
Objetos do R (O que são?):....................................................................................................... 13
Como criar objetos .................................................................................................................... 13
Criar vetores com valores numéricos .................................................................................... 13
Criar vetores com caracteres (letras, variáveis categóricas). ............................................... 14
Criar matrizes ........................................................................................................................ 14
Operações com objetos............................................................................................................. 14
Acessar valores de elementos de um objeto [colchetes] .......................................................... 15
Transformar dados .................................................................................................................... 15
Listar e remover objetos salvos ................................................................................................. 16
Gerar Dados .................................................................................................................................. 16
Gerar sequências ...................................................................................................................... 16
: (dois pontos) ........................................................................................................................ 16
seq(from,to,by) ...................................................................................................................... 16
Repetições ................................................................................................................................. 17
rep(x,vezes) ........................................................................................................................... 17
Dados aleatórios ........................................................................................................................ 17
runif(n,min,max) – para distribuições uniformes ................................................................... 17
rnorm(n,mean,sd) – para distribuições normais .................................................................... 17
Tirar amostras aleatórias ........................................................................................................... 18
sample(objeto,size,replace) .................................................................................................. 18
Ordenar e a atribuir postos (ranks) aos dados .......................................................................... 18
sort ......................................................................................................................................... 18
order ...................................................................................................................................... 19
rank ........................................................................................................................................ 19
Exercícios com operações básicas ............................................................................................... 19
Dia 2 – Usando o script e aprendendo a fazer gráficos ................................................................ 21
Usar o script do R para digitar os comandos ............................................................................ 21
Exercícios com o script do R ..................................................................................................... 22
Gráficos do R................................................................................................................................. 22
3
Landeiro, Zucco, Menezes e Oliveira-Santos, 2010
4
Landeiro, Zucco, Menezes e Oliveira-Santos, 2010
5
Landeiro, Zucco, Menezes e Oliveira-Santos, 2010
“Outro ponto que eu repetidamente apresento aos meus estudantes é que o R é gratuito e vai
continuar a existir. Nada pode fazê-lo sumir. Uma vez aprendido, você não será mais sujeito a mudanças
de preços (por exemplo de zero quanto estudante, pois você usa a cópia de seu orientador, à várias
centenas de dólares ou mais quando você sai do laboratório). Você pode levá-lo com você aonde você
vá. O investimento no aprendizado, nesse sentido tem um retorno garantido no longo prazo.”
Habilidades em delineamento amostral e estatística são chave para todo ecólogo. Para Nicholas J.
Gotelli, famoso por seus livros em ecologia de comunidades e estatística, aprender R ou Delphis (outra
linguagem de programação estatística) é um dos principais conselhos dados aos interessados em
trabalhar em seu laboratório (http://www.uvm.edu/~ngotelli/GradAdvice.html).
Tantas possibilidades e ao mesmo tempo nenhuma delas prontamente acessível através de
interface amigável que caracteriza a computação moderna, torna o primeiro contato com o R às vezes
traumatizante e o aprendizado inicial quase sempre penoso. Esperamos ao final deste curso, convencer
a maioria dos estudantes que a necessidade de aprender programação não é um preciosismo de quem
tem um gosto pelo assunto e quebrar a resistência inicial dos novos usuários ao R, fazendo-os se sentir
à vontade para continuar aprendendo por conta própria.
6
Landeiro, Zucco, Menezes e Oliveira-Santos, 2010
7
Landeiro, Zucco, Menezes e Oliveira-Santos, 2010
8
Landeiro, Zucco, Menezes e Oliveira-Santos, 2010
checar e definir o working directory da sessão atual. Assim, confira digitando e veja o output que o R
retorna:
> getwd() #função sem argumentos, por isso os parênteses vazios
[1] "C:/Documents and Settings/Victor Landeiro/My Documents"
Feche o R e abra-o novamente clicando no arquivo da pasta escolhida, faça os exercícios e no final
apenas feche o R, irá aparecer uma caixa perguntando se deseja salvar o workspace, diga que sim. A
partir daqui, sempre abra o R a partir do workspace (arquivo) salvo na pasta do seu trabalho.
Pacotes do R
O R é um programa leve (ocupa pouco espaço e memória) e geralmente roda rápido, até em
computadores não muito bons. Isso porque ao instalarmos o R apenas as configurações mínimas para
seu funcionamento básico são instaladas (o pacote base). Para realizar tarefas mais complicadas pode
ser necessário instalar pacotes adicionais (packages). Um pacote bastante utilizado em ecologia é o
vegan, vegetation analysis, criado e mantido por Jari Oksanen (Oksanen et al., 2007). Para instalar um
pacote vá ao site do R (www.r-project.org), clique em CRAN, escolha o espelho e clique em packages,
uma lista com uma grande quantidade de pacotes está disponível. Clique no pacote que deseja e depois
clique em windows binary e salve o arquivo. Abra o R e clique em Packages, depois em Install
Package(s) from local zip files e selecione o arquivo do pacote que você baixou. Baixe e instale os
pacotes vegan e o pacote lattice.
O R também pode conectar-se diretamente à internet. Desta forma é possível, instalar e atualizar
pacotes sem que seja necessário acessar a página do R.
Para instalar um pacote direto do R digite, por exemplo:
> install.packages("vegan") ## É necessário estar conectado!
Durante o curso, se o seu computador não estiver ligado à internet, verifique se há uma pasta
chamada “Pacotes” no material do curso. Nós já baixamos os dois pacotes e colocamos no material
fornecido prevendo que isso poderia acontecer. Faça apenas o procedimento de instalação dos dois
pacotes recomendados.
Após isso as funcionalidades do vegan estarão prontas para serem usadas. Sempre que abrir o R
será necessário rodar o pacote novamente.
9
Landeiro, Zucco, Menezes e Oliveira-Santos, 2010
Veja que na parte com o nome dos autores aparece "R Development Core Team", isso está correto,
cite o R desta forma. Algumas pessoas não sabem disso e citam o R com autor Anônimo, isto tira o
crédito do time.
Para citar um pacote, por exemplo o vegan, basta colocar o nome do pacote entre aspas.
> citation("vegan") Lembre das aspas
To cite package ‘vegan’ in publications use:
Jari Oksanen, F. Guillaume Blanchet, Roeland Kindt, Pierre Legendre, R.
B. O'Hara, Gavin L. Simpson, Peter Solymos, M. Henry H. Stevens and Helene
Wagner (2010). vegan: Community Ecology Package. R package version 1.17-2.
http://CRAN.R-project.org/package=vegan
USANDO O R
Demonstrações
Algumas funções do R possuem demonstrações de uso. Estas demonstrações podem ser vistas
usando a função demo(). Vamos ver algumas demonstrações de gráficos que podem ser feitos no R.
Digite o seguinte na linha de comandos:
> demo(graphics)
Aparecerá uma mensagem pedindo que tecle Enter para prosseguir, depois vá clicando na janela
dos gráficos para ver as opções.
> demo(persp)
> demo(image)
Use parênteses para separar partes dos cálculos, por exemplo, para fazer a conta 4+16 dividido por
4 elevado ao quadrado:
> ((4+16)/4)^2
> (4^2)+(3^2)/25
10
Landeiro, Zucco, Menezes e Oliveira-Santos, 2010
Funções matemáticas do R
O R tem diversas funções que podemos usar para fazer os cálculos desejados. O uso básico de
uma função, como já dito antes é função(argumentos) onde função especifica o nome da função
que iremos usar e argumentos especifica a lista de argumentos que serão avaliados, sempre
separados por vígulas quando houver mais de um argumento.
Por exemplo: sqrt é a função para calcular raiz quadrada
> sqrt(9) # Tira a raiz quadrada dos argumentos entre parênteses, no caso 9
log(x,base) é a função para calcular o logaritmo do valor x na base. Por default, a base é o
algarismo neperiano “e”, portanto:
> log(3) # log natural de 3
11
Landeiro, Zucco, Menezes e Oliveira-Santos, 2010
ENTENDA O HELP!!!
1 - Description - faz um resumo geral da função
2 - Usage - mostra como a função deve ser utilizada e quais argumentos podem ser especificados
3 - Arguments - explica o que é cada um dos argumentos
4 - Details - explica alguns detalhes que é preciso estar atento ao usar a função
5 - Value - mostra o que sai no output após usar a função (os resultados)
6- Note - notas sobre a função
7 - Authors - lista os autores da função (quem escreveu os códigos em R)
8 - References - referências para os métodos usados
9 - See also - mostra outras funções relacionadas que podem ser consultadas
10 - Examples - exemplos do uso da função. Copie e cole os exemplos no R para ver como
funciona
Quando for usar uma função que nunca utilizou é no help que você aprenderá a usá-la. Os tópicos
Usage e Arguments são os mais importantes, pois mostram como os argumentos devem ser inseridos
na função (Usage) e caso não saiba o que é algum desses argumentos existe uma explicação para cada
um deles (Arguments). Muitas pessoas têm dificuldade em entender o help do R e dizem que o help é
ruim. Pelo contrário, ele possui tudo que você precisa saber. Nada a mais nem nada a menos do que o
necessário. Ao longo do curso, gaste um tempo inspecionando o help das funções mais interessantes
que você for aprendendo.
12
Landeiro, Zucco, Menezes e Oliveira-Santos, 2010
Relembrando: o comando <- significa assinalar (assign). Indica que tudo que vem após este
comando será salvo com o nome que vem antes. Traduzindo então, temos: "agrupe os dados entre
parênteses dentro do objeto aves que será criado".
Para ver os valores (o conteúdo de um objeto), basta digitar o nome do objeto na linha de
comandos.
> aves #chama conteúdo de aves
13
Landeiro, Zucco, Menezes e Oliveira-Santos, 2010
Criar matrizes
Para criar matrizes podemos juntar inúmeros vetores que já existem, ou usar o comando
matrix(sequência,linhas,colunas) que distribui a sequência na matriz de dimensões que você
indicou. Digamos que as riquezas de aves do exemplo anterior tivessem sido coletadas em 5 locais com
duas estações diferentes.
> aves2<-matrix(c(22,28,37,34,13,24,39,5,33,32),5,2)
> aves2
Você entendeu a sintaxe acima? Se perdeu nos parênteses e virgulas? Observe que há uma função
dentro da outra. Para entender melhor, decomponha as funções nos seus argumentos. Perceba que o
c() é apenas um argumento de matrix(). Alternativamente, poderíamos fazer a mesma coisa assim:
> aves2<-matrix(aves,5,2)
Em analogia ao comando length(x) de vetores, há o comando dim(x) para matrizes que retorna
no número de linhas e colunas do objeto. Veja:
> dim(aves2)
14
Landeiro, Zucco, Menezes e Oliveira-Santos, 2010
Agora vamos usar o que já sabemos para calcular a média dos dados das aves.
> n.aves<-length(aves) # número de observações (n)
Para acessar mais de um valor use c() dentro dos colchetes [c(1,3,...)]: para concantenar vários
elementos ao mesmo tempo:
> aves[c(5,8,10)] # acessa o quinto, oitavo e décimo valores
Matrizes possuem duas dimensões e por isso precisamos especificar ambas dentro dos colchetes.
Assim a sintaxe geral é objeto[linhas,colunas]:
Transformar dados
Transformações de dados são procedimentos bastante comuns antes de análises estatísticas. As
mais comumente usadas são aplicações de funções matemáticas simples sobre seus dados, como log,
raiz quadradas e arco seno.
> sqrt(aves) #Raiz quadrada dos valores de aves
15
Landeiro, Zucco, Menezes e Oliveira-Santos, 2010
LEMBRE que para salvar os dados é preciso atribuir a função à um novo objeto (ou salvá-la como
um novo objeto). Por exemplo:
> aves.log<-log10(aves) # salva um objeto com os valores de aves em log
Para remover objetos use rm() para remover o que está entre parênteses.
> rm(aves.log)
GERAR DADOS
Gerar sequências
: (dois pontos)
Dois pontos " : " é usado para gerar sequências simples, de um em um, por exemplo a seqüência de
1 a 10:
> 1:10 # Seq de mínimo a máximo, isto é., de 1 a 10
> 5:16
Também é possível fazer sequências simples em ordem decrescente:
> 8:1
seq(from,to,by)
A função seq(from,to,by)é usada para gerar seqüências do valor from, até o valor to de
acordo com o intervalo by especificado. Por exemplo, vamos criar uma seqüência de 1 a 10 pegando
valores de 2 em 2:
> seq(1,10,2) # tradução: “from 1 to 10, by 2”, ou “de 1 a 10, de 2 em 2”.
16
Landeiro, Zucco, Menezes e Oliveira-Santos, 2010
Repetições
rep(x,vezes)
A função rep(x,vezes=n) gera repetição de x,n vezes. Digamos que vc precisa criar uma
variável de 100 elementos com todos os valores iguais a 5 e não tem paciência para digitar isso no
comando c():
> rep(5,100) # repete 5 cem vezes
Você pode gerar repetição de um valor, caracteres ou conjunto de valores e caracteres:
> rep(2,5)
Note a diferença ao usar o argumento each. Veja no help dessa função que each é um argumento
cujo valor default é 1
> rep(1:4,each=3) # compare com o comando anterior
Dados aleatórios
runif(n,min,max) – para distribuições uniformes
Com a sintaxe runif(n, min, max), vc cria uma sequência de n valores, com o intervalo de min
a max. O programa gera números reais conforme a especificações:
> runif(200,80,100) # 200 valores com mínimo de 80 e máximo 100
> hist(rnorm(200,8,10)) # Os dois comandos acima reunidos em apenas um, Repita esse
# comando algumas vezes e veja se os gráficos parecem com uma distribuição normal.
17
Landeiro, Zucco, Menezes e Oliveira-Santos, 2010
> table(teste) # a função table() faz uma tabela de freqüência dos valores existentes
Rode várias vezes os dois comandos acima e veja o quanto o resultado se aproxima de 1:1.
> exemplo # veja que os valores não estão em ordem. Talvez com muita sorte os seus
valores estejam.
[1] 94 27 89 82 24 51 2 54 37 38 # seus valores serão diferentes
sort
A função sort(obj)retorna os valores de um objeto em ordem crescente ou em ordem
decrescente.
> sort(exemplo) # para colocar em ordem crescente
[1] 2 24 27 37 38 51 54 82 89 94
18
Landeiro, Zucco, Menezes e Oliveira-Santos, 2010
order ATENÇÃO!!!
Note que o primeiro valor acima é 7, isso indica que se quisermos colocar o objeto "exemplo" em
ordem crescente, devemos pegar o 7º elemento, segudo do 5º, do 2º e assim por diante, até que
teremos pego todos os elementos na ordem crescente de valor. Também podemos aplicar a função para
ordem decrescente:
> order(exemplo,decreasing=TRUE)
[1] 1 3 4 8 6 10 9 2 5 7
rank
A função rank(objeto) retorna a posição dos elementos caso eles fossem ordenados:
2. Você consegue prever o resultado dos comandos abaixo? Caso não consiga, execute os
comandos e veja o resultado:
2.1. x<-c(1,3,5,7,9)
2.2. y<-c(2,3,5,7,11,13)
2.3. x+1
2.4. b)y*2
2.5. c)length(x) e length(y)
2.6. d) x + y
2.7. e) y[3]
2.8. f) y[-3]
19
Landeiro, Zucco, Menezes e Oliveira-Santos, 2010
B (4 5 6 7)
4. Todos os anos, o trinta-réis-ártico (Sterna paradisuea), uma avezinha preta e branca, com pouco
menos de 40 centímetros, realiza um longo vôo de pólo a pólo. Durante nove meses, ele percorre 20000
quilômetros, do Circulo Polar Ártico até o limite da Antártida, e retorna, então, ao ponto de partida.
Usando a calculadora do R, em apenas uma linha de comando, calcule a velocidade média em m/s
dessa ave (assuma o mês como tendo 30 dias). (Gabarito: 1.71 m/s)
3 2 3 2
5. Calcule |2 -3 |. Módulo de 2 -3 . Faça isso em apenas uma linha de comando.
6. Suponha que você coletou na sua monografia 10 amostras em duas reservas, as 5 primeiras
amostras foram na reserva A e as 5 ultimas na reserva B. Crie um objeto do tipo vetor, chamado
"locais" que especifica apenas os rótulos das reservas onde as amostras foram coletadas.
7. Você deseja jogar na mega-sena, mas não sabe que números jogar, use a função sample do R
para escolher os seis números para você jogar. A mega-sena tem valores de 1 a 60.
8. Crie uma seqüência de valores de 1 a 30 apenas com números impares. Use a função seq().
9. Einstein disse que Deus não joga dados, mas o R joga! Simule o resultado de 25 jogadas de um
dado. Você precisará criar o objeto dado, e usar a função sample().
Crie um objeto chamado info que contem seu nome, idade, altura, peso, email e telefone.
Feche o R: Ao fechar aparecerá um a pergunta sobre salvar ou não o Workspace, diga que sim. Abra
o R novamente e confira se seus objetos ainda estão salvos usando o comando ls().
20
Landeiro, Zucco, Menezes e Oliveira-Santos, 2010
Digite 3+3 no script e aperte Ctrl+R. O 3*3 será enviado para a linha de comandos do R e o
resultado aparecerá na tela. Para fazer outro comando aperte Enter e escreva outro comando na outra
linha do script (cada comando deve ser digitado em uma linha diferente). Podemos também enviar os
comandos para o R selecionando uma parte de linha ou algumas linhas com o mouse e aí digitar Ctrl+R.
Daqui em diante sempre use o script do R. Tudo ficará mais rápido! No script você também pode
inserir observações sobre o que foi feito, usando # para indicar a presença de um comentário. Por
exemplo:
> x<-sample(1:10,20,replace=TRUE) # criar um objeto chamado x, composto de 20
# valores amostrados ao acaso entre 1 e 10. O replace=TRUE indica que a amostragem foi feita
# com reposição.
> mean(x) # uso da função mean para calcular a média de x.
21
Landeiro, Zucco, Menezes e Oliveira-Santos, 2010
GRÁFICOS DO R
Produzir gráficos de qualidade é uma ótima forma de apresentar e explorar dados. O R é
reconhecido por ter grande potencial para geração de gráficos. Você pode fazer praticamente qualquer
gráfico que imaginar, mas particularmente nesse campo as coisas podem se tornar difíceis. Os gráficos
mais comuns são os gráficos de barras, pizza e de pontos (gráfico de dispersão).
Histogramas – hist(objeto,breaks)
Nós já vimos este tipo de gráfico, mas não custa relembrar. O histograma, é diferente do gráfico de
barras pois retorna a freqüência de valores dentro de intervalos, enquanto o barplot retorna uma barra
para cada valor. O número de barras depende do número de intervalos em que a distribuição será
dividida. Ele é definido por um algoritmo próprio, mas mexendo no argumento breaks você pode
controlar quantas barras haverão, indicando onde estarão as quebras entre barras.
> hist(rnorm(300,100,10))
22
Landeiro, Zucco, Menezes e Oliveira-Santos, 2010
> pie(c(1,5,7,10))
Veja os exemplos de gráficos de pizza
> example(pie)
Para usuários de outros programas que usam linha de comando, é comum trabalhar com a lógica
“plote y em função de x” de maneira que o primeiro argumento é sempre a variável resposta. Se sua
cabeça está acostumada com essa forma de pensar, vc pode usar:
> plot (y~x) # mesmo comando da linha acima
A variável categórica é o fator sexo e os dois níveis são "macho" e "fêmea". Em princípio, os níveis
do fator podem ser nomes ou números (1 para macho e 2 para fêmea). Use nomes aqui para facilitar.
Vamos supor que estamos avaliando o peso de machos e fêmeas de uma dada espécie. Digamos
que na nossa amostra, os 5 primeiros elementos eram machos e os últimos cinco eram fêmeas. Vamos
criar uma variável que informa isso:.
> sexo<-c("Ma","Ma","Ma","Ma","Ma","Fe","Fe","Fe","Fe","Fe")
Se fossem 20 machos e 20 fêmeas, ia dar um trabalhão fazer esse comando ein!! Então tente
recriar a variável sexo com 5 “Ma” e 5 “Fe” usando o comando rep(x,vezes).
O peso dos animais será dado pelos valores do objeto y que criamos há pouco. Apenas indique
isso:
> peso<-y # peso é igual a y
> peso
23
Landeiro, Zucco, Menezes e Oliveira-Santos, 2010
Observe que o comando não funcionou, deu erro! Isso ocorreu porque não informamos que sexo é
um fator. Vamos verificar o que o R acha que é a variável sexo.
> is(sexo) # o que é sexo?
Veja que o R trata a variável sexo como sendo um "vetor de caracteres". Mas nós sabemos que
sexo é o nosso fator, então precisamos dar esta informação ao R. A função factor(objeto),
transforma o vetor de caracteres em fator. O fator é um novo tipo de objeto que ainda não tínhamos
visto. É caracterizado por um conjunto de dados categóricos ou nominais que podem assumir um
número finito de níveis. Várias funções do R requerem que as variáveis categóricas sejam apresentadas
na forma de fator. Talvez você queira voltar aos tipos de objetos na 13 para anotar essa nova informação
lá. Seguindo adiante, vamos converter sexo em fator:
> factor(sexo)
Gráficos do tipo boxplot são bons quando o número de observações (de dados) é muito grande.
Neste caso, um gráfico com pontos seria melhor, pois podemos ver quantas observações foram
utilizadas para produzir o gráfico e comunicarmos os dados reais ao leitor.
Para fazer um gráfico de pontos quando uma variável é categórica precisamos usar a função
stripchart(y~x).
Os pontos não estão mais totalmente sobrepostos, mas um símbolo ainda está sobre o outro. #
Usando o argumento offset=valor conseguimos separá-los.
>_stripchart(peso~sexo,vertical=T,at=c(1.3,1.7),method="stack",offset=1)
24
Landeiro, Zucco, Menezes e Oliveira-Santos, 2010
Você pode alterar a legenda do eixo y da mesma forma, porem usando ylab. Use as setas e
coloque o argumento da legenda do eixo y.
> plot(x,y,xlab="Var explanatória",ylab="Var resposta")
Também é fácil mudar os símbolos do gráfico, neste momento você está usando a opção default,
que é a "bolinha vazia" (pch=1). Se você deseja que o símbolo seja um "x" use pch=4. Use a seta para
cima pra inserir o argumento pch.
> plot(x,y,xlab="Var explanatória",ylab="Var resposta",pch=4)
25
Landeiro, Zucco, Menezes e Oliveira-Santos, 2010
Há, no entanto, uma linha muito mais interessante e útil que podemos inserir num gráfico de pontos:
aquela que expressa a relação linear entre duas variáveis. No curso de estatística, aprendemos que a
equação da reta é y= a + bx. Assim para produzir a linha no gráfico, basta informar quais os valores das
constantes a (intercepto) e b (ângulo).
Para extrair rapidamente essa informação (sem entrar em detalhes sobre regressão linear) nós
usamos a função lm(y~x)que significa linear model de y em função de x. Em seguida fazemos o
gráfico e inserimos a linha informando as constantes
> lm(y~x)
Call:
a - intercepto
lm(formula = y ~ x)
Coefficients:
(Intercept) x
118.667 -9.212 b - ângulo
Agora que você já entendeu como o R faz para inserir a linha do modelo, você gostará de saber que
há uma maneira mais fácil e direta de inserir esta informação no gráfico:
read.mtp() - Minitab
Adicionar mais pontos ao gráfico read.spss() - SPSS
read.ssd() - SAS
Em alguns casos podemos querer inserir pontos de outro local no mesmo gráfico, usando símbolos
diferentes para o novo local. Suponha que temos novos valores da variável resposta e da variável
explanatória, coletados em outro local, e queremos adicionar estes valores no gráfico. Os valores são
> v<- c(3,4,6,8,9) ## novos valores da variável explanatória
26
Landeiro, Zucco, Menezes e Oliveira-Santos, 2010
> plot(1:10,1:10)
Agora vamos adicionar "seu nome" no gráfico nas coordenadas 6 e 7. Isso indica que seu nome
ficará na posição 6 do eixo X e na posição 7 do eixo Y.
> text(6,7,"Seu.Nome")
Para inserir duas palavras:
> text(c(2,3),c(8,6),c("nome","sobrenome")) # A primeira palavra ficará na posição
# 2-8 e a segunda palavra ficará na posição 3-6.
Também é possível adicionar texto aos gráficos usando a função locator(n). Para mais de um
texto:
> plot(1:10,1:10)
> text(locator(3),c("texto 1","texto 2","texto 3"))
Salvar os gráficos
Existem diversas opções para salvar os gráficos do R. A mais simples é clicar com o botão direito
do mouse sobre o gráfico e depois em "save as metafile". Esse formato não perde qualidade quando
transferido para o Microsoft Office e continua como desenho vetorial no Corel Draw. Para quem usa o
editor de texto LATEX e sabe o que é um arquivo postscript também existe esta opção com o "save as
postSscript".
27
Landeiro, Zucco, Menezes e Oliveira-Santos, 2010
Também é possível salvar os gráficos em PDF, JPEG, BMP, PNG ou outros formatos. Para tanto
clique sobre o gráfico e depois clique em Arquivo e em salvar como. Escolha a opção que deseja salvar.
2.1. Um colega coletou mais dados sobre aves e árvores, em outra área, que podemos aproveitar.
Os dados são:
> arvores2<-c (6,17,18,11,6,15,20,16,12,15)
> aves2<-c(7,15,12,14,4,14,16,60,13,16)
Inclua estes novos pontos no gráfico com um símbolo diferente e cor azul.
2.2. Junte o seu arquivo de aves com o arquivo de aves do seu amigo, para que fique em um arquivo
completo: aves.c<-c(aves,aves2). Faça o mesmo para árvores.
2.3. Os dados do exercício anterior foram coletados em regiões diferentes (você coletou no local A e
seu amigo no local B). Faça um gráfico para ver qual região tem mais aves e outro para ver qual
tem mais árvores. Lembre que você precisa criar um vetor indicando o local de cada coleta (local
A ou local B). Use função stripchart.
2.4. Existem locais com o mesmo número de aves, e no gráfico estes pontos apareceram
sobrepostos. Faça o gráfico sem pontos sobrepostos (lembre-se dos argumentos method e
offset)
Existem milhares de outros comandos para alterar a aparência de gráficos, veja esta página do help
(?par) para ver alguns comandos sobre como alterar a aparência de gráficos. Não se preocupe se você
ficar confuso sobre as opções do help(par), apenas praticando você irá começar a dominar estes
comandos.
28
Landeiro, Zucco, Menezes e Oliveira-Santos, 2010
Note que esta tabela contém variáveis numéricas e categóricas, portanto este é um exemplo de
objeto do tipo dataframe. Para importar a tabelas em formato “txt separado por tabulações” para o R a
função é read.table.
> read.table("amostras.txt",header=TRUE)
O argumento header=TRUE informa que os dados possuem cabeçalho, ou seja, a primeira linha
contém os nomes dos atributos (variáveis) e a primeira coluna possui o nome das amostras.
Não se esqueça de atribuir os dados à um objeto, não basta importar, é preciso salvar também.
> macac<-read.table("amostras.txt",header=TRUE)
O objeto macac é um objeto do tipo dataframe. Isso quer dizer que macac é um objeto que
possui linhas e colunas (observações nas linhas e variáveis (atributos) nas colunas). Para ver os dados
digite o nome do arquivo.
> macac
29
Landeiro, Zucco, Menezes e Oliveira-Santos, 2010
Arquivos .csv são arquivos de texto com células separadas por vírgulas. O Excel salva neste
formato e pode ler este formato diretamente como uma planilha, sem maiores dificuldades. Você deve
ficar atento, no entanto, a língua do seu computador. Computadores em português tendem a usar “;”
como separador de células em arquivos csv. Se este for o caso, use o comando read.csv2() que irá
automaticamente reconhecer esta diferença.
No ambiente Windows, você pode usar tanto as barras duplas // ou a barra invertida \. Caso você
não lembre o nome do arquivo de dados que deseja importar existe a opção de procurar os dados no
computador com a função file.choose(), que abre uma caixa de diálogo onde você procura pelo
arquivo como em outros programas para Windows.
> macac<-read.table(file.choose(),header=T) # encontre o arquivo macac.txt
Você também pode conferir se um determinado arquivo de dados existe no seu working directory:
> file.exists("macac.txt")
30
Landeiro, Zucco, Menezes e Oliveira-Santos, 2010
Existem outras duas maneiras de extrair dados de uma dataframe. Uma é usando a função
attach(objeto), que torna as variáveis acessíveis apenas digitando o nome delas na linha de
comandos, como se elas fossem objetos também.
Digite macacos na linha de comandos e veja o que acontece!
> macacos
Error: object "macacos" not found
Agora use a função attach(), digite macacos novamente e veja o que acontece.
> attach(macac) #variáveis de macaco estão acessíveis como se fossem
objetos
> macacos # agora os dados macacos está disponível
> frutas # para ver o número de frutas
> reserva # para ver as reservas
> plot(macacos,frutas)
IMPORTANTE!!!
A função attach apesar de parecer "uma mão na roda" pode ser problemática. Se
"atacharmos" duas dataframes, e elas tiverem variáveis com o mesmo nome, é "perigoso"
usarmos por engano a variável errada. Se você usar a função attach é seguro
"desatachar" o objeto imediatamente após o seu uso. Para isso use detach().
> detach(macac)
> macacos #macacos não está mais disponível
31
Landeiro, Zucco, Menezes e Oliveira-Santos, 2010
Uma melhor forma de acessar colunas pelo nome é usar o símbolo cifrão ($), e não usar a função
attach(). O cifrão funciona apenas com objetos do tipo lista. Como já dissemos na página 13 que
dataframe’s são um tipo especial de lista, por isso o cifrão funciona também com dataframes. O uso é
basicamente o seguinte: objeto$variável (a variável corresponde à coluna que deseja extrair). Por
exemplo, para extrair a coluna macacos use:
> macac$macacos
Ou então usar colchetes e o nome da variável:
> macac[,"macacos"]
Vamos fazer o gráfico de macacos X frutas usando $.
> plot(macac$frutas,macac$macacos)
Faça o gráfico de frutas X macacos usando colchetes ao invés de usar $.
Tome um tempo para entender porque o ordenamento de tabelas funciona com comando order()
e não com o comando sort(). Para tanto vamos decompor o comando em passo a passo. Primeiro
olhamos a função order().
> order(macac$frutas)
Veja que o output indica um sequência de números que correspondem a posição dos elementos na
coluna macac$frutas em ordem crescente. Ou seja, os elementos 11 e 15 são os que possuem menores
valores de frutas, seguidos de 8, 5, 14. Ao colocar esse comando dentro de macac[ ,] estamos
dizendo que queremos a sequência de linhas expressas por order(macac$frutas).
32
Landeiro, Zucco, Menezes e Oliveira-Santos, 2010
E se quisermos calcular apenas a abundância média de moluscos nos pontos da reserva A (linhas
de 1 a 5)? Você consegue fazer este cálculo? Veja as quatro opções abaixo e diga qual delas fará o
cálculo correto.
1 - mean(mol[,1:6])
2 - rowMeans(mol[1:5,1:6])
3 - colMeans(mol[1:5,1:6])
4 - mean(rowSums(mol[1:5,1:6]))
33
Landeiro, Zucco, Menezes e Oliveira-Santos, 2010
Segundo essa sintaxe está dito que será calculada a função nos dados em relação ao grupo
indicado. Vamos demonstrar a aplicação do comando na base dados do arquivo “deer.txt” com
resultados de monitoramento de GPS de 11 veados campeiros (Ozotoceros bezoarticus) no Pantanal de
Mato Grosso do Sul. Durante esse estudo, os receptores GPS eram programados para obter uma
localização a cada 5 minutos.
> deers<- read.table(“deers.txt”, header=TRUE)
> dim(deers)
[1] 31620 8
> names(deers) # para ver os nomes das variáveis do objeto deers
Nesse objeto há 31.620 linhas que correspondem às localizações geográficas obtidas durante o
monitoramento. A coluna ID, identifica o indivíduo à qual a localização se refere.
> table(deers$ID) # retorna a quantidade de pontos de cada indivíduo
2 3 5 6 9 10 12 13 14 15 20
653 1025 2049 1610 5035 3594 2231 4837 3718 3639 3229
É possível perceber que o estudo obteve 653 localizações do veado #2, 1025 localizações do veado
#3, 2049 localizações do veado #4, etc. A coluna deer$DIST, contém a informação de distância que o
animal se deslocou desde a última localização. Se desejarmos saber quanto cada animal se deslocou
durante o período de seu monitoramento, bastaria somar o deslocamento entre todas as localizações.
Assim queremos somar os valores de distância deslocada (deer$DIST) por indivíduo (deer$ID). Vejamos
como fazer usando tapply().
A família apply, possui outros três tipos de aplicação além do tapply(). Abaixo explicamos
brevemente a aplicação de cada uma:
apply (dados, MARGIN, função, simplify=TRUE)
O apply() executa a função definida nos dados por coluna ou linha e não por grupo como o
tapply(). O argumento, MARGIN pode ser igual a 1 para indicar linha; 2 para indicar colunas ou
c(1,2) para indicar ambos. Se a função desejada for somatório, o apply() faz a mesma coisa que
as funções colSums e rowSums como visto acima. Se a função for média, aí ele equivale ao
colMeans e rowMeans. A importância do apply() é que ele permite a execução de qualquer
função no conjunto de dados. Veja os exemplos
> apply(mol[,1:6],MARGIN=2,sum) # somar colunas de mol(colunas 1- 6)
34
Landeiro, Zucco, Menezes e Oliveira-Santos, 2010
Note que as 6 primeiras variáveis são ambientais e depois os dados de 20 espécies. Estes dados
foram coletados em três municípios dentro da chapada diamantina (Lençóis, Mucugê e Rio de Contas).
Primeiro vamos separar os dados das espécies dos dados ambientais:
> ambi<-simu[,1:6]
> spp<-simu[,7:26]
Vamos ver os gráficos que mostram as relações entre as variáveis ambientais.
> plot(ambi[,"temperatura"],ambi[,"altitude"])
> plot(ambi[,"altitude"],ambi[,"pH"])
> plot(ambi[,"condutividade"],ambi[,"pH"])
35
Landeiro, Zucco, Menezes e Oliveira-Santos, 2010
Agora use a função colSums() para ver em quantos riachos cada espécie ocorreu e qual a
abundância total de cada espécie. Qual a espécie que ocorreu em mais riachos? Qual era a mais
abundante?
Para transformar os dados de abundância de espécies em log:
> simu.log<-log(spp)
Veja o resultado em log:
> simu.log # Note a presença do valor -inf
Relembrando: o valor -inf ocorre porque não é possível calcular o log de 0. Veja:
> log(0)
Por isso é comum você ver em trabalhos os dados transformados em log(x+1):
> spp.log<-log(spp+1)
> spp.log
Agora vamos retornar ao nosso arquivo completo, simu, e ordenar a tabela de acordo com a
altitude, de forma que o primeiro riacho seja o que está localizado em menor altitude.
> simu[order(simu[,"altitude"]),]# tabela ordenada pela altitude
Agora vamos fazer 4 gráficos da riqueza de espécies em relação a altitude, pH, temperatura e
condutividade. Primeiro vamos dividir a janela de gráficos em 4 partes.
> par(mfrow=c(2,2))
Riqueza X altitude
> plot(simu[,"altitude"],rowSums(pres.aus))
EXERCÍCIO: Faça os outros três gráficos.
Agora vamos fazer um gráfico para ver a riqueza de espécies nas três áreas (Lençóis, Mucugê e
Rio de contas).
> stripchart(riqueza~factor(simu[,"município"]))
EXERCÍCIO: Coloque o gráfico na vertical e separe os pontos coincidentes.
As funções aggregate e by
As funções by(dados,grupo,função) e aggregate(dados,grupo,funçao) podem ser
utilizadas para aplicar uma função em todas as colunas de uma tabela, enquanto a função tapply() faz
isso apenas uma coluna por vez. As duas funções retornam os mesmos resultados, mas de formas
diferentes. Para calcular a média de cada espécie de borrachudo em cada um dos 3 locais use:
> aggregate(spp,list(simu[,1]),mean)
Veja que a função aggregate() retorna uma dataframe com os valores para cada local em cada
coluna. Agora tente o seguinte comando:
> by(spp,simu[,1],mean)
A função by() retorna uma lista com os valores para cada local. Para acessar os valores de uma
lista é preciso usar duplo colchetes:
> med.local<-by(spp,simu[,1],mean)
> med.local
36
Landeiro, Zucco, Menezes e Oliveira-Santos, 2010
> med.local[["Lençóis"]]
> med.local[["Mucugê"]]
> med.local[["R.Contas"]]
LEMBRE-SE!!
Aggregate
by (dados, grupo, função)
tapply
COMANDOS DE LÓGICA
Opções para manipular conjunto de dados.
Primeiro vamos ver o significado dos comandos abaixo.
> Maior que >= maior que ou igual a
== igualdade
!= diferença
> x<-c(1,2,9,4,5)
> y<-c(1,2,6,7,8)
37
Landeiro, Zucco, Menezes e Oliveira-Santos, 2010
which(teste lógico)
A função which(teste lógico) retorna a especificação lógica TRUE ou FALSE para uma dada
condição lógica apresentada. Na prática ele funciona como se fosse a pergunta: Quais?
> a<-c(2,4,6,8,10,12,14,16,18,20)
> a>10 # retorna um vetor contendo TRUE se for maior e FALSE se for menor
> which(a>10) # Equivale a pergunta: "Quais valores de a são maiores que 10?".
# Note que a resposta é a posição dos valores (o sexto, o sétimo…) e não os valores que são
# maiores que 10.
> a[6] # selecionamos o sexto valor de a
Também podemos incluir um segundo critério de escolha usando & (que significa "e"). Vamos
escolher apenas as parcelas da reserva B e que tenham o valor de chuva maior que 1650mm.
> mol[which(mol$reserva=="B" & mol$chuva>1650),]
As pessoas que ganham menos de 1000 ganham pouco, concorda? Não chega nem a uma mísera
bolsa de mestrado. Então aplicamos o teste e pedimos para retornar "pouco" para quem ganha menos
de 1000 e "muito" para quem ganha mais de 1000.
> ifelse(salarios<1000,"pouco","muito") # Se o salário é menor que 1000, seja
# pouco, se for maior seja muito.
38
Landeiro, Zucco, Menezes e Oliveira-Santos, 2010
Também podemos usar o comando ifelse para transformar os dados em presença e ausência.
Vamos usar os dados das espécies de borrachudos (spp) da Chapada Diamantina.
> ifelse(spp>=1,1,0) # se o valor de spp for maior ou igual a 1 seja 1, se não, seja 0
7. Podemos usar a função ifelse() para transformar dados de abundância em dados de presença
e ausência. Transforme os dados de abundância de moluscos mol em dados de presença e
ausência.
8. Com os dados transformados em presença e ausência, use a função rowSums para ver
quantas espécies de moluscos ocorrem em cada parcela. Use colSums para ver em quantas
parcelas cada espécie estava presente.
Os monitoramento de veado campeiro foi planejado para avaliar padrões de atividade. Um dos
padrões mais básicos de se investigar é o ligado ao ciclo diário. Com os dados de veado-campeiro deers
faça:
8.1. um gráfico de barras que expresse o deslocamento total por hora do ciclo diário. Para tanto,
basta somar os deslocamento associado a todos os pontos obtidos dentro de cada intervalo de
hora. Como a variável hora dec fornece a hora décima exata de cada localização, vc pode usar o
comando round() para fazer com que cada ponto seja atrelado a uma faixa de horário e possa
executar os somatórios por faixa
8.2. um gráfico de barras que expresso o deslocamento total por hora do ciclo diário apenas para o
veado #5.
39
Landeiro, Zucco, Menezes e Oliveira-Santos, 2010
Function(){} é a função para criar funções. No comando acima, está dito: "estou criando uma
função que vai se chamar funçãoA". A partir de agora, essa função será um objeto no seu workspace.
Na verdade, todas as funções de R são objetos, mas elas estão contidas nos pacotes e não precisam
figurar como objetos de seu workspace. Aquelas funções criadas pelo usuário, por outro lado, precisam
ser materializadas como objetos do workspace.
Na sequência são listados todos os argumentos que a funçãoA terá. Eles serão usados no corpo
da função que é a parte onde é escrito o "algoritmo" dos procedimentos a serem executados. Esta parte
vem entre chaves.
DICA DE PROGRAMAÇÃO!!
Embora não seja uma obrigação, é praxe entre programadores, colocar a chave de abertura
da função “{“ no fim da primeira linha e a chave de encerramento “}” numa linha separada após o
fim do corpo da função. Isso auxilia na leitura de linhas de programação quando elas são muito
extensas e possuem funções dentro de funções.
O comando sample(x,n) indica que desejamos amostrar x, n vezes (jogar a nosso objeto de
soirteio moeda n vezes).
Agora vamos usar nossa função para jogar uma moeda. Primeiro criamos a moeda para então
jogar:
> moeda<-c("Cara","Coroa")
40
Landeiro, Zucco, Menezes e Oliveira-Santos, 2010
> jogador(moeda,2)
> jogador(moeda,10)
> jogador(moeda,1000)
Veja que jogando 1000 moedas ficou difícil saber quantas caras e quantas coroas saíram. Lembra
como fizemos para conferir isso dois dias atrás??? Use a função table():
> table(jogador(moeda,1000))
Conhecendo a fórmula você pode criar sua própria função que calcula a média. Note que você pode
inserir comentários dentro da função para depois lembrar o que fez:
> media<-function(dados){ # função chamada media
+ } # Fim da função
Vamos usar a função criada (media) para calcular a média dos valores abaixo:
> valores<-c(21, 23, 25, 19, 10,1 ,30, 20, 14, 13)
> média(valores)
Use a função do R mean() para verificar se o cálculo foi feito corretamente.
Comando for()
O comando for é usado para fazer loopings, isto é, repetir um mesmo procedimento inúmeras
vezes. Funciona da seguinte maneira:
for(i in 1:n){comandos}
Isso quer dizer que: para cada valor i o R vai calcular os comandos que estão entre as chaves. O
"(i in 1:n)" indica que i assumirá todos os valores no intervalo entre 1 e n. Ou seja, na primeira
rodada do for o i será igual a 1, na segunda i = 2, e assim por diante até i = n. Para salvar os
resultados que serão calculados no for precisamos criar um objeto vazio que receberá os valores
calculados. Criamos este objeto vazio assim:
Nunca esquecer de criar
> resu<-numeric(0) objeto vazio para receber
os resultados do for
41
Landeiro, Zucco, Menezes e Oliveira-Santos, 2010
O R fez tudo muito rápido, de forma que não conseguimos ver os passos que ele deu. Vamos fazer
novamente, mas agora inserindo uma função que retarde o R em 1 segundo. Ou seja, cada passo irá
demorar 1 segundo.
> plot(0:10,0:10, type="n")
> for(i in 1:9){
+ text(i,i, paste("Passo", i))
Entendeu o que está sendo feito? No primeiro passo do for, o i é igual a 1, portanto apareceu o
texto "passo 1" na coordenada x=1, y=1 do gráfico. No segundo passo o i é igual a 2 e aparece o texto
"passo 2" na coordenada x=2, y=2, e assim por diante.
O for é um comando bastante utilizado em diversas funções e na simulação de dados. Fique
atento ao uso do for nas funções seguintes e pergunte caso não tenha entendido.
A seqüência de Fibonacci é uma seqüência famosa na matemática (Braun & Murdoch 2007). Os
dois primeiros números da seqüência são [1, 1]. Os números subseqüentes são compostos pela soma
dos dois números anteriores. Assim, o terceiro número da seqüência de Fibonacci é 1+1=2, o quarto é
1+2=3, e assim por diante. Vamos usar a função for para descobrir os 12 primeiros números da
seqüência de Fibonacci (Este exemplo foi retirado e adaptado de: Braun & Murdoch 2007 pp, 48).
> Fibonacci<-numeric(0)
42
Landeiro, Zucco, Menezes e Oliveira-Santos, 2010
Exercícios
1. Modifique o código para gerar a seqüência de Fibonacci de forma que:
1.1. os dois primeiros elementos da seqüência sejam 2 e 2
1.2. os dois primeiros elementos da seqüência sejam 3 e 2
1.3. modifique o código para que os valores sejam compostos pela diferença entre os dois valores
anteriores.
1.4. modifique o código para que os valores sejam compostos pela diferença entre os dois valores
imediatamente anteriores somada ao terceiro valor imediatamente anterior. Faça inicialmente
com que a seqüência Fibonacci comece com 3 valores [1,1,1].
+ prop<-dados/sum(dados) # calcula o pi
+ n<-length(prop)
+ for(i in 1:n){
+ resu[i]<-if(prop[i]>0){prop[i]*log(prop[i])}
Nota: Durante o cálculo do índice de Shannon precisamos pular do calculo quando o valor
de proporção é zero, porque log(0) não existe (-inf). Por isso usamos o if e o else, ou
seja, se (if) o valor for maior que zero faça o calculo, se não (else) retorne 0.
43
Landeiro, Zucco, Menezes e Oliveira-Santos, 2010
Agora vamos usar a função shannon para calcular o índice de Shannon dos dados apresentados
no livro da Anne Magurran página 45, tabela 2.1 (Magurran, 1988). Os dados são:
> magur<-c(235,218,192,0,20,11,11,8,7,4,3,2,2,1,1)
# O valor 0 foi alterado propositalmente, no livro o valor é 87.
> shannon(magur)
Esta função que criamos para calcular o índice de diversidade de Shannon calcula o índice de
apenas um local por vez (roda em uma coluna ou vetor apenas). Agora vamos criar uma função que
calcula o índice de Shannon de vários locais ao mesmo tempo, isto é, que aceita uma matriz de dados
com cada coluna representando um local ou unidade amostral. Neste caso teremos que usar o comando
for duas vezes.
> shan<-function(dados){ # nome de shan para diferenciar da função acima
+ } # Fim da função
Onde, no caso de uma matriz de espécies: a = número de espécies compartilhadas pelos locais 1 e
2; b = número de espécies presentes apenas no local 1; c = número de espécies presentes apenas no
local 2. Vamos criar uma função para calcular o índice de similaridade de Jaccard:
> jaccard<-function(dados.spp){
44
Landeiro, Zucco, Menezes e Oliveira-Santos, 2010
+ # Vamos inserir uma mensagem de erro, caso dados não sejam de presença-ausência
+ if(any(dados.spp>1))
+ stop("Erro: é preciso fornecer uma tabela com dados de presença e
+ ausência")
Para fim de comparação vamos calcular o Jaccard com o pacote vegan. O R não calcula
similaridade, apenas distâncias (inverso da similaridade). Portanto, usamos 1-distância para recuperar o
valor de similaridade:
> jac.vegan<-1-vegdist(pres.aus,"jaccard")
> jac.vegan
45
Landeiro, Zucco, Menezes e Oliveira-Santos, 2010
Onde: y1j é a abundância da espécie j no local 1 e y2j é a abundância da espécie j no local 2. Esta
fórmula calcula a dissimilaridade e não similaridade (diferente do exemplo anterior do Jaccard). Então
vamos criar uma função para calcular o índice de similaridade de Bray-Curtis.
> bray<-function(dados.spp){
+ n<-nrow(dados.spp)
+ BrayCurtis<-matrix(NA,n,n)
+ for(i in 1:n){
+ for(j in 1:n){
+ numerador<-sum(abs(dados.spp[i,]-dados.spp[j,]))
+ denominador<-sum(dados.spp[i,]+dados.spp[j,])
+ BrayCurtis[i,j]<- numerador/denominador
+ }
+ }
+ return(as.dist(BrayCurtis))
+ }
Vamos usar nossa função bray para a comunidade de borrachudos e comparar com o resultado
obtido usando a função vegdist do pacote vegan.
> bra<-bray(spp)
> bra.vegan<-vegdist(spp,"bray")
> cbind(bra,bra.vegan)
> bra==bra.vegan ### veja se os resultados são TRUE
46
Landeiro, Zucco, Menezes e Oliveira-Santos, 2010
Onde: y1j são os valores de abundância de cada espécie j no local 1; y2j são os valores de abundância
de cada espécie j no local 2; y1+ é a soma total das abundâncias do local 1; y2+ é a soma total das
abundâncias do local 2. Não se assuste com a fórmula, tente dividi-la em partes dentro da função.
Para calcular a distância de Hellinger no R e conferir com resultado da sua função use:
> hel.vegan<-vegdist(decostand(spp,"hellinger"),"euclid")
4. Desafio: Calcule o índice de Shannon usando apenas 3 linhas de comando e o índice de
Simpson usando apenas uma linha de comandos.
Agora, caso você queira mudar o número de jogos (njogos), é preciso mudar o valor e rodar o
código todo novamente.
Crie agora 50 jogos.
Vamos transformar nosso código em uma função e ver o que muda, apesar dos comandos serem
quase os mesmos.
> megasena<-function(njogos){ # cria a função com nome de megasena
47
Landeiro, Zucco, Menezes e Oliveira-Santos, 2010
> megasena(5)
Em geral, muitas pessoas criam um código, conferem se ele está funcionando e depois transformam
o código em uma função para facilitar o processo de repetição.
114.7
0.0
Altitude
Ramphastos vitellinus
Lanio fulvus
Bucco capensis
Index Microbates collaris
Hylophilus ochraceiceps
Terenotriccus erythrurus
Corapipo gutturalis
Lipaugus vociferans
Dendrocolaptes certhia
Deconychura longicauda
Myrmotherula gutturalis
Micrastur gilvicollis
Thamnomanes caesius
Relative density of species
Dendrocincla fuliginosa
Galbula albirostris
Mionectes macconnelli
Glyphorynchus spirurus
Dixiphia pipra
Tachyphonus surinamus
Dendrexetastes rufigula
Dendrocincla merula
Phaethornis superciliosus
Turdus albicollis
Pithys albifrons
Formicarius colma
Thalurania furcata
Xiphorhynchus pardalotus
Geotrygon montana
Hylexetastes perrotii
Sclerurus mexicanus
Thamnomanes ardesiacus
Xenops minutus
Frederickena viridis
Percnostola rufifrons
Cyanocompsa cyanoides
Platyrinchus coronatus
Momotus momota
Sclerurus rufigularis
Hypocnemis cantator
Deconychura stictolaema
Myrmotherula menetriesii
Cyphorhinus arada
Hylophylax poecilinotus
Schiffornis turdina
Myrmotherula axillaris
Philydor pyrrhodes
Leucopternis melanops
Myiobius barbatus
Sites
Abaixo segue o código da função genérico, você irá copiar e colar o código no R da parte indicada
abaixo até a parte final indicada no fim da função. Não modifique este código, uma vez que ele seja
colado no R você não precisará copiar e colar novamente, desde que salve o seu workspace.
Script da funcão
#####################Copie e cole no R daqui! ################################
48
Landeiro, Zucco, Menezes e Oliveira-Santos, 2010
generico<-function(tabela,gradiente,at,grad,eixoY,eixoX){
## Começo da função onde são especificados todos os 6 argumentos:
# “tabela”, “gradiente”, at, grad, eixoY, eixoX. Abaixo seguem alguns
comentários e exemplos sobre a função e seus argumentos.
####### Argumentos #######
# generico<-function(tabela, gradiente ,at,"grad","eixoY","eixoX")
# tabela é a tabela de espécies, uma data frame ou matriz com os dados
das espécies
# gradiente arquivo com os valores do gradiente
# at é usado para alterar a posição do nome das espécies no gráfico,
comece com o valor 1 e vá aumentando até os nomes ficarem na posição
desejada.
# grad é o texto para a legenda que deseja colocar no gráfico
mostrando o nome do gradiente. Esta legenda não pode ser muito longa. Deve
vir entre aspas.
# eixoY e eixoX são as legendas que deseja colocar nos eixos x e Y.
Deve vir entre aspas.
##Para colocar o nome das espécies no local desejado é preciso mudar o
valor do argumento at
dados.pa<-matrix(0,nrow(tabela),ncol(tabela))
dados.pa[tabela>0]<-1
49
Landeiro, Zucco, Menezes e Oliveira-Santos, 2010
par(mfrow=c(ncol(ordenado)+1,1),mar=c(0,4,0.2,10),oma=c(3,1,1,6))
layout(matrix(1:(ncol(ordenado)+1)),heights=c(3,rep(1,ncol(ordenado))))
plot(sort(gradiente[,1]),axes=F,ylab="",mfg=c(21,1),lwd=10,las=2,lend="bu
tt",frame.plot=F,xaxt="n",type="h",col="black",ylim=c(min(gradiente),max(grad
iente)))
axis(side=2,at=c(0,max(gradiente)),las=2)
mtext(grad,4,outer=T,font=2,line=-10,padj=-18.5,las=2)
for(i in 1:ncol(ordenado)){
barplot(ordenado[,i],bty="l",axisnames=F,axes=FALSE,col="black")
#axis(side=2,at=max(ordenado[,i]),las=2)
mtext(colnames(ordenado)[i],3,line=-1.0,adj=0,at=at,cex=.8,font=3)
}
mtext(eixoX,1,outer=T,font=2,line=1.2)
mtext(eixoY,2,font=2,outer=T,line=-2)
}
50
Landeiro, Zucco, Menezes e Oliveira-Santos, 2010
REFERÊNCIAS
Braun,W.J. & Murdoch,D.J. (2007) A first course in statistical programming with R, -163, Cambridge
University Press, Cambridge.
Burns, P. 2006. R Relative to Statistical Packages: comment 1 on Techniqucal Report Number 1 (Version
1.0) Strategically using General Purpose Statistics Packages: A look at Stata, SAS and SPSS.
Disponível em http://www.ats.ucla.edu/technicalreports/default.htm
Chambers,J.M. (2008) Software for data analysis: Programming with R. Springer .
Fox, J. The R Commander: A Basic-Statistics Graphical Use Interface to R. Journal of Statistical
Sofware, 14(2). Disponível em http://www.jstatsoft.org/
Owen, W.J. 2007 - The R Guide. Disponível em
http://w ww.m at hc s .r ic h m ond. e du / ~ wo we n/T h eRG u i de .p df
Lam, L. 2007. An Introduction to R. Bussiness and Decision: Amsterdan
nd
Legendre P & Legendre R. 1998. Numerical Ecology. 2 Edition. Amsterdam: Elsevier Science.
Magurran, A.E. Diversidad Ecológica y su Medición. Barcelona: Vedra, 200p.
Oksanen, J., Kindt, R., Legendre, P., O'Hara, R. B., and Stevens, M. H. H (2007) vegan: Community
Ecology Package. R package version 1.8-8. http://cran.r-project.org/, http://r-forge.r-
project.org/projects/vegan/
R Development Core Team (2010) R: A language and environment for statistical computing. R
Foundation for Statistical Computing, Vienna, Austria. ISBN 3-900051-07-0, http://www.R-
project.org.
Venable, W.N., Smith, D.M. and R Development Core Team. 2010. An Introduction to R. Disponível em
http://cran.r-project.org/doc/manuals/R-intro.pdf
Verzani, J. 2002. simpleR - Using R for Introductory Statistics. Disponível em
www.math.csi.cuny.edu/Statistics/R/simplesR/printable/simpleR.pdf
51