Esse material foi elaborado para o Minicurso de Introdução ao R e Aplicações no Melhoramento de Plantas. O minicurso foi ministrado pelos alunos de pós-graduação do Programa de Genética e Melhoramento de Plantas da ESALQ (USP).
Você pode acessar os outros materiais elaborados para o minicurso aqui.
O R está diponível para os sistemas operacionais Linux, Mac e Windows. Aqui descreveremos os passos necessários para instalação no sistema Linux. Para instruções detalhadas de como instalar para qualquer um dos sistemas acesse o site do CRAN:
O primeiro passo para a instalação é procurar pelo arquivo sources.list
e adicionar à ele o caminho para o “espelho” do R de sua preferência (veja as opções aqui) e a distribuição Linux referente ao seu sistema. Normalmente, o arquivo esta localizado em:
cd /etc/apt/
Pode ser que o arquivo esteja com permissão apenas para leitura para os usuários comuns, portanto acesse-o como super usuário utilizando um editor de texto de sua preferência e adicione o caminho. Exemplo:
sudo nano sources.list
Aqui consideraremos a distribuição Linux xenial (correspondente à Ubuntu 16.04) e escolheremos o espelho localizado na ESALQ, portanto adicionamos a linha:
#deb https://brieger.esalq.usp.br/CRAN/bin/linux/ubuntu xenial/
A partir disso basta seguir os comandos:
sudo update
sudo apt-get install r-base
sudo apt-get install r-base-dev
Abrindo o R você verá algo como:
O RStudio é uma interface mais amigável do R, com funcionalidades muito práticas. A interface do RStudio também esta disponível para os sistemas Windows, Mac e Linux. Para qualquer um deles, selecione o arquivo correspondente no site.
No caso de um sistema linux, o arquivo baixado terá extenção .deb
(para Ubuntu) ou .rpm
(para Fedora) e basta clicar duas vezes no arquivo que o gerenciador de pacotes do Linux iniciará a instalação.
Abrindo o RStudio você verá:
A interface é separada em quatro janelas com principais funções:
Explore cada uma das janelas. São inumeras funcionalidades para cada uma delas, exploraremos algumas delas a seguir.
Utilize a janela de edição de código (provavelmente a localizada no canto superior esquerdo) para escrever o seu código e salve o arquivo com o nome que desejar com terminação .R
. Aperte o botão Run
para processar cada linha do código ou use Ctrl + enter
.
Vamos então à linguagem!
O R pode funcionar como uma simples calculadora, que utiliza a mesma sintaxe que outros programas (como o excel):
1+1
2*3
2^3
4/2
sqrt(4)
log(100, base = 10)
log(100)
Para organizar o seu código é uma ótima prática fazer comentários nele, para que você possa se lembrar mais tarde do que estava pensando no momento ou para que outras pessoas possam entendê-lo. Para isso, use #
para que o R entenda que trata-se de apenas um comentário, como no exemplo:
#########################
# Script da Prática Básica
# do minicurso "Introdução ao R"
# Data: 25/07/2017
# Cristiane Taniguti
##########################
# Operações básicas
1+1.4 #Decimal definido com "."
2*3
2^3
4/2
sqrt(4) #raíz quadrada
log(100, base = 10) #logarítmo na base 10
log(100) #logarítmo com base neperiana
Agora, utilize as operações básicas para solucionar expressão:
\((\frac{13+2+1.5}{3})+ log_{4}96\)
Resultado esperado:
## [1] 8.792481
Os comandos log
e sqrt
são duas de muitas outras funções básicas que o R possui. Para todas elas o R possui uma descrição para auxiliar no seu uso, para acessar essa ajuda use:
?log
E será aberta a descrição da função na janela Help
do RStudio.
Se a descrição do próprio R não for suficiente para você entender como funciona a função, busque no google (de preferência em inglês). Existem diversos sites e fóruns com informações didáticas das funções do R.
Os vetores são as estruturas mais simples trabalhadas no R. Construímos um vetor com uma sequencia numérica usando:
c(1,3,2,5,2)
## [1] 1 3 2 5 2
Podemos utilizar outras funções para gerar sequencias, como:
seq(from=0, to=100, by=5)
## [1] 0 5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80
## [18] 85 90 95 100
# ou
seq(0,100,5) # Se você já souber a ordem dos argumentos da função
## [1] 0 5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80
## [18] 85 90 95 100
seq
que varie de 4 a 30, com intervalos de 3 em 3.seq(from=4, to=30, by=3)
## [1] 4 7 10 13 16 19 22 25 28
A função rep
gera sequencias com números repetidos:
rep(3:5, 2)
## [1] 3 4 5 3 4 5
Podemos realizar operações utilizando esses vetores:
c(1,4,3,2,5,8)*2
c(4,2,1,5,3,2)+c(5,2,6,1,3,5)
c(4,2,1,5,3,2)*c(5,2,6,1,3,5)
Repare que já esta ficando cansativo digitar os mesmos números repetidamente, vamos resolver isso criando objetos para armazenar nossos vetores e muito mais.
O armazenamento de informações em objetos e a possível manipulação desses faz do R uma linguagem orientada por objetos. Para criar um objeto basta atribuir valores para variáveis como a seguir:
x = c(30.1,30.4,40,30.2,30.6,40.1)
# ou
x <- c(30.1,30.4,40,30.2,30.6,40.1)
y = c(0.26,0.3,0.36,0.24,0.27,0.35)
Os mais antigos costumam usar o sinal <-
, mas tem a mesma função de =
. Escolha usar o qual preferir.
Para acessar os valores dentro o objeto basta:
x
## [1] 30.1 30.4 40.0 30.2 30.6 40.1
A linguagem é sensível à letras maiúsculas e minúsculas, portanto x
é diferente de X
:
X
O objeto X
não foi criado.
Podemos então realizar as operações com o objeto criado:
x*2
x + y
x*y
E podemos armazenar a operação em outro objeto:
z <- (x+y)/2
z
Podemos também aplicar algumas funções, como exemplo:
sum(z) # soma dos valores de z
## [1] 101.59
mean(z) # média
## [1] 16.93167
var(z) # variância
## [1] 6.427507
Acessamos somente o 3º valor do vetor criado com []
:
z[3]
Também podemos acessar o número da posição 2 a 4 com:
z[2:4]
## [1] 15.35 20.18 15.22
Para obter informações do vetor criado utilize:
str(z)
## num [1:6] 15.2 15.3 20.2 15.2 15.4 ...
A função str
nos diz sobre a estrutura do vetor, que se trata de um vetor numérico com 6 elementos.
Os vetores também podem receber outras categorias como caracteres:
clone <- c("GRA02", "URO01", "URO03", "GRA02", "GRA01", "URO01")
Outra classe são os fatores, esses podem ser um pouco complexos de lidar. Agora no início, é bom evitá-los a não ser que esteja trabalhando com modelos estatísticos (como faremos em outra prática).
De forma geral, fatores são valores categorizados por levels
, como exemplo, se transformarmos nosso vetor de caracteres clone
em fator, serão atribuidos níveis para cada uma das palavras:
clone_fator <- as.factor(clone)
str(clone_fator)
## Factor w/ 4 levels "GRA01","GRA02",..: 2 3 4 2 1 3
Dessa forma, teremos apenas 4 níveis para um vetor com 6 elementos, já que as palavras “GRA02” e “URO01” se repetem. Podemos obter o número de elementos do vetor ou o seu comprimento com:
length(clone_fator)
## [1] 6
Também vetores lógicos, que recebem valores de verdadeiro ou falso:
logical <- x > 40
logical # Os elementos são maiores que 40?
## [1] FALSE FALSE FALSE FALSE FALSE TRUE
Com ele podemos, por exemplo, identificar quais são as posições dos elementos maiores que 40:
which(logical) # Obtendo as posiçoes dos elementos TRUE
## [1] 6
x[which(logical)] # Obtendo os números maiores que 40 do vetor z pela posição
## [1] 40.1
Encontre mais sobre outros operadores lógicos, como o >
utilizado, neste link.
Não é possível misturar diferentes classes dentro de um mesmo vetor, ao tentar fazer isso repare que o R irá tentar igualar para uma única classe:
errado <- c(TRUE, "vish", 1)
errado
## [1] "TRUE" "vish" "1"
No caso, todos os elementos foram transformados em caracter.
As matrizes são outra classe de objetos muito utilizadas no R, com elas podemos realizar operações de maior escala de forma automatizada, como veremos mais adiante com modelos estatísticos.
Por serem usadas em operações, nelas somente armazenamos elementos numéricos. Para criar uma matriz, determinamos uma sequência de números e indicamos o número de linhas e colunas da matriz:
X <- matrix(1:12, nrow = 6, ncol = 2)
X
## [,1] [,2]
## [1,] 1 7
## [2,] 2 8
## [3,] 3 9
## [4,] 4 10
## [5,] 5 11
## [6,] 6 12
Podemos também utilizar sequencias já armazenadas em vetores para gerar uma matriz, desde que eles sejam numéricos:
W <- matrix(c(x,y), nrow = 6, ncol =2)
W
## [,1] [,2]
## [1,] 30.1 0.26
## [2,] 30.4 0.30
## [3,] 40.0 0.36
## [4,] 30.2 0.24
## [5,] 30.6 0.27
## [6,] 40.1 0.35
Com elas podemos realizar operações matriciais:
X*2
## [,1] [,2]
## [1,] 2 14
## [2,] 4 16
## [3,] 6 18
## [4,] 8 20
## [5,] 10 22
## [6,] 12 24
X*X
## [,1] [,2]
## [1,] 1 49
## [2,] 4 64
## [3,] 9 81
## [4,] 16 100
## [5,] 25 121
## [6,] 36 144
X%*%t(X) # Multiplicação matricial
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 50 58 66 74 82 90
## [2,] 58 68 78 88 98 108
## [3,] 66 78 90 102 114 126
## [4,] 74 88 102 116 130 144
## [5,] 82 98 114 130 146 162
## [6,] 90 108 126 144 162 180
Utilizar essas operações exige conhecimento de álgebra de matrizes, se quiser se aprofundar a respeito, o livro Linear Models in Statistics, Rencher (2008) possui um boa revisão à respeito. Você também pode explorar a sintaxe do R para essas operações neste link.
Acessamos os números internos à matriz dando as coordenadas [linha,coluna], como no exemplo:
W[4,2] # Número posicionado na linha 1 e coluna 4
## [1] 0.24
As vezes pode ser informativo dar nomes às colunas e às linhas da matriz, fazemos isso com:
colnames(W) <- c("altura", "diametro")
rownames(W) <- clone
W
## altura diametro
## GRA02 30.1 0.26
## URO01 30.4 0.30
## URO03 40.0 0.36
## GRA02 30.2 0.24
## GRA01 30.6 0.27
## URO01 40.1 0.35
Essas funções colnames
e rownames
também funcionam nos data.frames.
Diferente das matrizes, não realizamos operações com os data.frames, mas eles permitem a união de vetores com classes diferentes. Os data.frames são semelhantes à tabelas geradas em outros programas, como o excel.
Os data.frames são combinação de vetores de mesmo comprimento. Todos os que criamos até agora tem tamanho 6, verifique.
Podemos assim combiná-los em colunas de um único data.frame:
campo1 <- data.frame("clone" = clone, # Antes do sinal de "="
"altura" = x, # estabelecemos os nomes
"diametro" = y, # das coluna
"idade" = rep(3:5, 2),
"corte"= logical)
campo1
## clone altura diametro idade corte
## 1 GRA02 30.1 0.26 3 FALSE
## 2 URO01 30.4 0.30 4 FALSE
## 3 URO03 40.0 0.36 5 FALSE
## 4 GRA02 30.2 0.24 3 FALSE
## 5 GRA01 30.6 0.27 4 FALSE
## 6 URO01 40.1 0.35 5 TRUE
Podemos acessar cada uma das colunas com:
campo1$idade
## [1] 3 4 5 3 4 5
Ou também com:
campo1[,4]
## [1] 3 4 5 3 4 5
Aqui, o número dentro dos colchetes se refere à coluna, por ser o segundo elemento (separado por vírgula). O primeiro elemento se refere à linha. Como deixamos o primeiro elemento vazio, estaremos nos referindo a todas as linhas para aquela coluna.
Dessa forma, se quisermos obter um conteúdo específico podemos dar as coordenadas com [linha,coluna]:
campo1[1,2]
## [1] 30.1
## [1] 0.36
Mesmo se tratando de um data.frame, podemos realizar operações com os vetores numéricos que a compõe.
volume
:\(3.14*(diametro/2)^2*altura\)
## [1] 1.597287 2.147760 4.069440 1.365523 1.751131 3.856116
Agora, vamos adicionar o vetor calculado com o volume ao nosso data.frame. Para isso use a função cbind
.
campo1 <- cbind(campo1, volume)
str(campo1)
## 'data.frame': 6 obs. of 6 variables:
## $ clone : Factor w/ 4 levels "GRA01","GRA02",..: 2 3 4 2 1 3
## $ altura : num 30.1 30.4 40 30.2 30.6 40.1
## $ diametro: num 0.26 0.3 0.36 0.24 0.27 0.35
## $ idade : int 3 4 5 3 4 5
## $ corte : logi FALSE FALSE FALSE FALSE FALSE TRUE
## $ volume : num 1.6 2.15 4.07 1.37 1.75 ...
Também podemos utilizar uma função muito prática chamada tapply
para obtermos operações específicas com os vetores. Aqui, obteremos a média da altura para cada idade:
tapply(campo1$altura, campo1$idade, mean)
## 3 4 5
## 30.15 30.50 40.05
## 3 4 5
## 1.481405 1.949445 3.962778
A função tapply
faz parte de uma família de funções denominadas apply
, elas são muito eficientes e você pode obter mais informações sobre elas neste link.
Os objetos criados dentro do R podem ser exportados em arquivos de diversos formatos. Mas, antes de exportá-los, vamos definir qual é o nosso diretório de trabalho.
Utilize a aba Files
para criar uma nova pasta (New Folder
) chamada MinicursoR
dentro da pasta Documents
. Esta será nossa pasta de trabalho, todos os arquivos que exportaremos ou importaremos do R irá automaticamente para esta pasta, mas para isso é necessário informar para o R seu caminho:
setwd("Documents/MinicursoR")
Verifique se funcionou:
getwd()
Para exportar o objeto no formato .RData, os quais podem ser lidos pelo R:
save(campo1, file = "campo1.RData")
Essa é uma forma de salvar o objeto trabalhado, se removermos ele com:
rm(campo1) # Certifique-se que salvou o objeto antes de removê-lo
Podemos facilmente obtê-lo novamente com:
load("campo1.RData")
Para salvar todos os objetos do seu workspace use:
save.image()
O R irá criar um arquivo .Rdata
contendo todos os seus objetos.
Podemos exportar nossos objetos em outros formatos, como, por exemplo, .txt
ou .csv
. Para isso utilizamos:
write.table(campo1, file = "campo1.txt", sep = ";", dec = ".", row.names = FALSE)
write.csv(campo1, file = "campo1.csv", row.names = TRUE)
Ao exportar há diversas opções para a formatação do arquivo, é importante considerá-las se o arquivo for ser trabalhado em outro sofware posteriormente.
Abra os arquivos gerados para visualizar sua formatação.
Esses arquivos podem ser lidos novamente pelo R, utilizando as funções e suas especificações:
campo1_txt <- read.table(file = "campo1.txt", sep=";", dec=".", header = TRUE)
campo1_csv <- read.csv(file = "campo1.csv")
head(campo1_txt)
## clone altura diametro idade corte volume
## 1 GRA02 30.1 0.26 3 FALSE 1.597287
## 2 URO01 30.4 0.30 4 FALSE 2.147760
## 3 URO03 40.0 0.36 5 FALSE 4.069440
## 4 GRA02 30.2 0.24 3 FALSE 1.365523
## 5 GRA01 30.6 0.27 4 FALSE 1.751131
## 6 URO01 40.1 0.35 5 TRUE 3.856116
head(campo1_csv)
## X clone altura diametro idade corte volume
## 1 1 GRA02 30.1 0.26 3 FALSE 1.597287
## 2 2 URO01 30.4 0.30 4 FALSE 2.147760
## 3 3 URO03 40.0 0.36 5 FALSE 4.069440
## 4 4 GRA02 30.2 0.24 3 FALSE 1.365523
## 5 5 GRA01 30.6 0.27 4 FALSE 1.751131
## 6 6 URO01 40.1 0.35 5 TRUE 3.856116
Agora que aprendemos a importar dados, vamos trabalhar com outro conjunto. Mas antes disso vamos criá-lo.
Vamos preencher um formulário do google drive para coletar algumas informações. Caso não queira responder alguma das perguntas, complete com -
o respectivo campo.
A planilha com os dados será disponibilizada em uma pasta específica, adicione-a ao seu diretório de trabalho ou indique o caminho da pasta ao importá-la para dentro do R, como a seguir.
Aqui usaremos o argumento stringAsFactors
que impede que o R transforme os vetores da tabela em fatores, os quais são mais difíceis de trabalhar. O argumento na.strings
irá indicar como foram nomeados os dados perdidos.
dados <- read.csv(file = "http://cristianetaniguti.github.io/Workshop_genetica_esalq//praticas_2017/Formulario_resultados.csv", stringsAsFactors = FALSE, na.strings = "-")
head(dados)
Vamos explorar a estrutura dos dados coletados:
str(dados)
Repare que nos nomes das colunas ainda estão as perguntas completas feitas no formulário, vamos alterar para nomes mais fáceis de trabalhar:
colnames(dados) <- c("Data_pesq", "Idade", "Niver", "Genero", "Cidade",
"Altura","Peso", "Area", "Programacao", "Nota")
Nossa primeira análise com esses dados envolverá um problema denominado “Paradoxo do aniversário”, que afirma que em um grupo de 23 pessoas (ou mais), escolhidas aleatoriamente, há mais de 50% de chance de duas pessoas terem a mesma data de aniversário.
Primeiro, vamos verificar em quantos somos, contando o número de linhas, para isso use a função nrow
.
nrow(dados)
Vamos então verificar se temos no nosso grupo pessoas que compartilham o mesmo dia de aniversário.
Podemos verificar isso facilmente com a função table
, que indica a frequência de cada observação:
table(dados$Niver)
##
## 01/03 01/09 05/10 09/08/1996 10/04 10/9
## 1 1 1 1 1 1
## 11/12 13/02 15/02 20/02 20/03 20/07
## 1 1 1 1 1 1
## 20/09 21/02/1995 24/09 24/12 25/07 26/07
## 1 1 1 1 1 1
## 28/04 28/05 29/08 30/12
## 1 1 1 1
Para nossa próxima atividade com os dados, vamos primeiro entender como funcionam as estruturas if
, else
e for
.
Nas funções condicionais if
e else
, estabelecemos uma condição para if, se ela for verdade a atividade será realizada, caso contrário (else) outra tarefa será. Como no exemplo:
if(2 >3){
print("dois é maior que três")
} else {
print("dois não é maior que três")
}
==
se refere a “exatamente igual a”)## [1] "Muito bom!"
Mas repare que só é possível utilizar a função para um elemento individual do vetor, se quisermos percorrer o vetor inteiro precisamos recorrer a outro recurso.
Esse recurso pode ser a função for
, uma função muito utilizada e poderosa. Ela constitui uma estrutura de loop, pois irá aplicar a mesma atividade repetidamente até atingir à uma determinada condição. Veja exemplos:
for(i in 1:10){
print(i)
}
test <- vector()
for(i in 1:10){
test[i] <- i+4
}
test
Nos casos acima, i
funciona como um index que irá variar de 1 até 10 a operação determinada entre chaves.
Com essa estrutura, podemos repetir a operação realizada com as estruturas if
e else
para todo o vetor:
for(i in 1:nrow(dados))
if(dados[i,9] == "Sim"){
print("Muito bom!")
} else {
print("Nunca é tarde para começar!")
}
Para outros dados coletados, vamos gerar alguns gráficos simples utilizando as funções básicas do R. Existem pacotes como o ggplot2
, plotly
e shiny
que possuem ferramentas muito poderosas para construção de gráficos, mas exigem um pouco mais de tempo para aprendizagem de sua sintaxe.
Vamos iniciar com um simples gráfico de frequências (ou histograma) para os dados de idade
.
hist(dados$Idade)
Vamos adicionar alguns argumentos para dar uma personalizada:
breaks
para definir os intervalos para cada barra;col
para adicionar cor;xlab
alterar título do eixo x;ylab
alterar título do eixo y;main
alterar título geral;hist(dados$Idade, breaks=6, col="blue", xlab="Idades",
ylab="Frequencia", main="Histograma das Idades (Lab StatGen 2017)")
Se preferir, podemos usar um gráfico de densidades de Kernel como:
d <- density(dados$Idade, na.rm = TRUE)
plot(d, col="blue", xlab="Idades",
ylab="Densidade", main="Densidade das Idades (Lab StatGen 2017)")
Alguns argumentos são específicos para cada função, busque mais informações sobre cada uma delas para entender sobre seus argumentos.
Podemos também fazer um gráfico de barras para a resposta Area
usando:
contagens <- table(dados$Area)
barplot(contagens, col= "red", main="Gráfico das Áreas")
Com esse tipo de gráfico é possível diferenciar colorações para diferentes categorias, como:
contagens <- table(dados$Genero, dados$Area)
barplot(contagens, col= c("yellow", "green", "red"), main="Gráfico de Áreas por gênero",
legend = rownames(contagens))
Ou podem ser gerados lado a lado:
contagens <- table(dados$Genero, dados$Area)
barplot(contagens, col= c("yellow", "green"), main="Gráfico de idades por gênero",
legend = rownames(contagens), beside = TRUE)
Na horizontal:
contagens <- table(dados$Genero, dados$Area)
barplot(contagens, col= c("yellow", "green"), main="Gráfico de idades por gênero",
legend = rownames(contagens), beside = TRUE, horiz = TRUE)
Vamos utilizar um boxplot para avaliar as Nota
:
boxplot(dados$Nota)
Sabe- se que existe uma correlação entre o peso e a altura das pessoas, e que, a distribuição dessas características configura uma bimodal se não considerarmos os gênero dos indivíduos avaliados. Vamos avaliar a correção entre essas caraterísticas com:
plot(dados$Altura, dados$Peso, main = "Altura x Peso", xlab = "Altura", ylab = "Peso")
Verificando o valor da correlação:
cor(dados$Altura, dados$Peso)
## [1] 0.6486322
Agora vamos verificar a distribuição delas, primeiro com todos os gêneros e posteriormente separando masculino e feminino.
Alt_total <- density(dados$Altura, na.rm = TRUE) # Todos os dados de altura
plot(Alt_total, main="Altura")
pos_fem <- which(dados$Genero=="Feminino") # Linhas referentes ao genero feminino
pos_masc <- which(dados$Genero=="Masculino") # Linhas referentes ao genero masculino
Alt_fem <- density(dados$Altura[pos_fem], na.rm = TRUE) # Somente dados de altura de mulheres
plot(Alt_fem, main="Altura de mulheres")
Alt_masc <- density(dados$Altura[pos_masc], na.rm = TRUE) # Somente dados de altura de homens
plot(Alt_masc, main="Altura de homens")
plot(Alt_total, col="black",ylim=c(0,10),xlim=c(1,2.5), main="Alturas")
lines(Alt_fem, col="red")
lines(Alt_masc, col="green")
### Fazendo o mesmo gráfico para peso
Peso_total <- density(dados$Peso, na.rm = TRUE) # Todos os dados de peso
plot(Peso_total, main="Peso")
Peso_fem <- density(dados$Peso[pos_fem], na.rm = TRUE) # Peso das mulheres
Peso_masc <- density(dados$Peso[pos_masc], na.rm = TRUE) # Peso dos homens
plot(Peso_total, col="black",ylim=c(0,0.2),xlim=c(40,120), main="Peso")
lines(Peso_fem, col="red")
lines(Peso_masc, col="green")
Ajuste os eixos xlim
e ylim
da forma que achar conveniente. Obtidos todos esses gráficos, pode ser bom para visualização tê-los lado a lado.
par(mfrow=c(1,2))
plot(Alt_total, col="black",ylim=c(0,10),xlim=c(1,2.5), main="Alturas")
lines(Alt_fem, col="red")
lines(Alt_masc, col="green")
plot(Peso_total, col="black",ylim=c(0,0.2),xlim=c(40,120), main="Peso")
lines(Peso_fem, col="red")
lines(Peso_masc, col="green")
Existem diversos pacotes disponíveis para variadas aplicações. Aqui usaremos o pacote ggmap
.
Ele esta disponível no repositório oficial do R, o CRAN, portanto para instalá-lo basta:
install.packages("ggmap")
Depois disso é necessário recrutá-lo com:
library(ggmap) # Este comando será necessário toda vez que for utilizar o pacote
## Loading required package: ggplot2
É um pacote que utiliza recursos online para gerar mapas conforme um conjunto de dados. Você pode obter mais informações sobre ele no manual disponível no CRAN.
Vamos utilizar a função geocode
para obter dados de longitude e latitude das cidades dos participantes do curso:
part1 <- geocode(dados$Cidade[1])
Podemos aplicar a mesma função para todos os participantes utilizando o for
.
coord <- data.frame()
for(i in 1:nrow(dados)){
coord <- rbind(coord,geocode(dados$Cidade[i]))
}
## Information from URL : http://maps.googleapis.com/maps/api/geocode/json?address=S%C3%A3o%20Tiago-MG&sensor=false
## Information from URL : http://maps.googleapis.com/maps/api/geocode/json?address=Pato%20Branco&sensor=false
## Information from URL : http://maps.googleapis.com/maps/api/geocode/json?address=Montevideo&sensor=false
## Information from URL : http://maps.googleapis.com/maps/api/geocode/json?address=Itapetininga%20-%20SP&sensor=false
## Information from URL : http://maps.googleapis.com/maps/api/geocode/json?address=Charqueada&sensor=false
## Information from URL : http://maps.googleapis.com/maps/api/geocode/json?address=Capelinha&sensor=false
## Information from URL : http://maps.googleapis.com/maps/api/geocode/json?address=Maring%C3%A1&sensor=false
## Information from URL : http://maps.googleapis.com/maps/api/geocode/json?address=Ribeir%C3%A3o%20Preto&sensor=false
## Information from URL : http://maps.googleapis.com/maps/api/geocode/json?address=Piracicaba-SP&sensor=false
## Information from URL : http://maps.googleapis.com/maps/api/geocode/json?address=Lima&sensor=false
## .
## Information from URL : http://maps.googleapis.com/maps/api/geocode/json?address=Americana&sensor=false
## Information from URL : http://maps.googleapis.com/maps/api/geocode/json?address=Uberl%C3%A2ndia&sensor=false
## Information from URL : http://maps.googleapis.com/maps/api/geocode/json?address=Carlos%20Chagas%20-%20MG&sensor=false
## Information from URL : http://maps.googleapis.com/maps/api/geocode/json?address=Itu/SP&sensor=false
## Information from URL : http://maps.googleapis.com/maps/api/geocode/json?address=Laranjal%20Paulista&sensor=false
## Information from URL : http://maps.googleapis.com/maps/api/geocode/json?address=S%C3%A3o%20Carlos&sensor=false
## Information from URL : http://maps.googleapis.com/maps/api/geocode/json?address=Piracicaba&sensor=false
## Information from URL : http://maps.googleapis.com/maps/api/geocode/json?address=Umuarama&sensor=false
## Information from URL : http://maps.googleapis.com/maps/api/geocode/json?address=Irati&sensor=false
## Information from URL : http://maps.googleapis.com/maps/api/geocode/json?address=Botucatu&sensor=false
## .
## Information from URL : http://maps.googleapis.com/maps/api/geocode/json?address=S%C3%A3o%20Jos%C3%A9%20dos%20Campos&sensor=false
## Information from URL : http://maps.googleapis.com/maps/api/geocode/json?address=Porecatu&sensor=false
Agora estabelecemos um mapa de fundo com a média das longitudes e latitudes:
mapcurso <- get_map(location =
c(lon = mean(coord$lon),
lat = mean(coord$lat)),
zoom = 4,
maptype = "roadmap", scale = 2)
## Map from URL : http://maps.googleapis.com/maps/api/staticmap?center=-19.332015,-47.437349&zoom=4&size=640x640&scale=2&maptype=roadmap&language=en-EN&sensor=false
Para mais informações sobre as funções do pacote utilize ?get_map
.
Agora vamos adicionar as localizações no mapa:
ggmap(mapcurso) +
geom_point(data = coord,
aes(x = lon, y = lat, fill = "red"),
size = 2, shape = 21)
## Warning: Removed 2 rows containing missing values (geom_point).
Aqui os argumentos de aes
definem características dos pontos no mapa, fill
indica a coloração, size
o tamanho e shape
o formato. Acesse outras codificações de formato aqui.
Utilize o R no seu dia-a-dia para ir praticando a linguagem. Além das recomendações contidas na primeira apresentação, recomendamos também dar uma olhada em como gerar documentos em pdf e html usando a Markdown. Utilizamos essa metodologia para gerar este tutorial e outras apresentações do minicurso. Pode ser muito prático no dia-a-dia!
Recentemente foi publicado um tutorial sobre isso no R-bloggers, que acreditamos ser um bom começo! Acesse aqui.