Minicurso R - 2019



1 R

1.1 O que é o R?

O R é um software livre e que fornece um ambiente estatístico para análise de dados e produção de gráficos. O R disponibiliza uma grande variedade de métodos estatísticos (modelagem linear e não-linear, testes estatísticos clássicos, séries temporais, classificação, métodos multivariados, etc) e técnicas gráficas. Um dos pontos fortes do R é a facilidade com que gráficos bem delineados e de alta qualidade para impressão podem ser produzidos com possibilidade de inclusão de fórmulas e símbolos matemáticos quando necessário. Mais que um software que realiza análises estatísticas, R é um ambiente e uma linguagem de programação orientada a objeto. Nele, números, vetores, matrizes, arrays, data frames e listas podem ficar armazenados em objetos.

1.2 Qual é a história da linguagem R?

A linguagem R surgiu um pouco depois da linguagem S. Uma das limitações de S era o fato da linguagem estar disponível apenas através do pacote comercial S-PLUS. Em 1991, R foi criado por Ross Ihaka e Robert Gentleman no Departamento de Estatística da Universidade de Auckland. Em 1993 a linguagem R foi anunciada em público pela primeira vez. Em 1995, Martin Mahler fez uma importante contribuição, convencendo Ross e Robert a usarem a licença GNU General Public e tornar R um software livre. Isso permitiu que o código fonte da linguagem R se tornasse disponível para toda a comunidade.

Em 1996 as listas públicas R-help e R-devel foram criadas e em 1997 foi formado o grupo R Core, com profissionais associados ao S e S-PLUS, estatísticos e cientistas da computação. Atualmente o grupo R Core controla o código fonte de R. Em 2000, finalmente a versão 1.0.0 do R foi liberada ao público e atualmente está na versão 3.5.3.

1.3 E por que aprender R?

Quase tudo que fazemos hoje deixa um rastro de informação. Todos os aparelhos construídos atualmente, sejam automóveis, celulares, computadores, televisores, geladeiras, etc. liberam dados. A verdade é que nunca medimos tanto as coisas. Isso é algo impressionante. Mas o que são dados?

Dados são coleções de fatos, tais como, números, palavras, imagens, sons e vídeos. Entretanto, grande parte desses dados é gerada de uma forma não estruturada ou em diferentes formatos, o que dificulta a análise e a possibilidade de transformar os mesmos em informação. Dessa forma, a revolução digital não está nas máquinas que geram os dados e sim na maneira que eles são utilizados. Essa situação traz grandes oportunidades para o profissional que souber fazer uma boa análise e tomar melhores decisões de negócio. (Post - Ciência de Dados: Uma Grande Oportunidade para Estatísticos)

Uma das formas de se fazer uma boa análise é utilizar a linguagem R. Conforme falado anteriormente, a linguagem fornece uma variedade de pacotes para se realizar análises descritivas, visualização de dados, modelagem preditiva, entre outros.

Ficou interessado? Continue lendo o material e faça os exercícios. E acima de tudo, divirta-se. Bons estudos!


2 Cheatsheet

Antes de começar a estudar este material veja as Folhas de Cola disponibilizadas no site do RStudio.


3 Funções

Funções são códigos encapsulados para realização de uma tarefa. Utilizando uma função faz com que não seja necessário escrever e copiar o código todas as vezes que precisar executar aquela operação.

Imagine um caso simples:

  1. Você tem 20 vetores e deseja calcular a média de cada um destes vetores.
  2. Sem uma função seria necessário somar os valores de cada elemento do vetor, dividir pelo número de elementos e replicar isto 20 vezes.
  3. Se tivéssemos uma função em que fornecemos o vetor e o output é a média do vetor, facilitaria muito nossa vida.
  4. Este exemplo parece simples, mas pense em casos em que temos tarefas mais complexas em que há necessidade de replicar uma tarefa mais de 20 vezes; se torna inviável não utilizar uma função.

As funções no R são definidas como: nome(argumento1, argumento2, ...)

3.1 Funções iniciais

Função O que faz
1 c() Cria um Vetor
2 <- Atribui um objeto para uma variável
3 getwd() Mostra o Diretório de Trabalho Atual
4 setwd(‘C:/Diretório’) Muda o Diretório de Trabalho
5 dir() Lista os Arquivos do Diretório de Trabalho Atual
6 sessionInfo() Mostra algumas informações da sessão instalada
7 install.packages(‘nome_do_pacote’) Instala um pacote
8 library(nome_do_pacote) Carrega um pacote
9 require(nome_do_pacote) Carrega um pacote
10 help.start() Mostra um tutorial para novos usuários de R
Função O que faz
11 help(‘função’) ou ?função Mostra a documentação de um pacote ou função
12 help.search(‘mean’) ou ??mean Faz uma pesquisa mais geral para o pacote ou função
13 example(‘plot’) Mostra exemplos de alguma função
14 print() Imprime o resultado de uma variável
15 q() Fecha a Sessão
16 ls() ou objects() Exibe os objetos que foram armazenados
17 rm(x,y) Remove o objeto ‘x’ e ‘y’
18 rm(list=ls()) ou rm(list=objects()) Remove todos os objetos que foram armazenados
19 str() Mostra a estrutura de um objeto
20 class() Verifica a classe de um objeto

3.2 Operadores Básicos (R utilizado como Calculadora)

Função O que faz
\(+\) Adição
\(-\) Subtração
\(*\) Multiplicação
/ Divisão
^ ou ** Exponenciação
%% Módulo
4 + 4 # Adição
## [1] 8
4 - 4 # Subtração
## [1] 0
4 * 4 # Multiplicação
## [1] 16
4 / 4 # Divisão
## [1] 1
(1+1) * 5 # Respeita a ordem comum de operações matemáticas
## [1] 10
4^2 # Exponenciação (4**2 também pode ser utilizado)
## [1] 16
14 %% 3 # Módulo
## [1] 2

3.3 Funções Matemáticas

Função O que faz
sqrt() Raiz Quadrada
factorial() Fatorial
exp() Exponencial
abs() Absoluto
log() Logaritmo Neperiano
round() Arredondamento
ceiling() Arredondamento para cima
floor() Arredondamento para baixo
sqrt(4) # Raiz Quadrada
## [1] 2
factorial(4) # Fatorial
## [1] 24
exp(1);exp(2) # Exponencial
## [1] 2.718282
## [1] 7.389056
abs(c(-2,-4,5,7)) # Absoluto
## [1] 2 4 5 7
log(2.71828182) # Logaritmo Neperiano
## [1] 1
round(2.718281, digits = 2) # Arredondamento com dois dígitos
## [1] 2.72
ceiling(2.718281) # Arredondamento para cima
## [1] 3
floor(2.718281) # Arredondamento para baixo
## [1] 2

3.4 Funções Estatísticas

Função O que faz
length() Imprime o comprimento de um vetor
mean() Calcula a média
median() Calcula a mediana
min() Imprime o valor mínimo
max() Imprime o valor máximo
var() Calcula a variância
sd() Calcula o desvio padrão
length(c(2,3,7,9,10)) # Imprime o comprimento do vetor
## [1] 5
mean(c(4,3,7,8)) # Calcula a média
## [1] 5.5
median(c(5,6,7,10)) # Calcula a mediana
## [1] 6.5
min(c(5,6,7,10)) # Imprime o valor mínimo
## [1] 5
max(c(5,6,7,10)) # Imprime o valor máximo
## [1] 10
var(c(5,6,7,10)) # Calcula a variância
## [1] 4.666667
sd(c(5,6,7,10)) # Calcula o desvio padrão
## [1] 2.160247

3.5 Criando Sequência de Valores

1:10 # Sequência de números inteiros de 1 a 10.
##  [1]  1  2  3  4  5  6  7  8  9 10
rep(x=1,times=20) # 20 repetições do número 1.
##  [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
seq(from=1,to=16, length.out = 7) # Sequência de 1 a 16 com comprimento 7.
## [1]  1.0  3.5  6.0  8.5 11.0 13.5 16.0
seq(from=1,to=20, by = 2) # Sequência de 1 a 20 com intervalo 2.
##  [1]  1  3  5  7  9 11 13 15 17 19
runif(n = 10, max = 6, min = 5) # 10 números aleatórios no intervalo entre 5 e 6 com base na distribuição uniforme de probabilidade.
##  [1] 5.580604 5.265172 5.739109 5.240558 5.105312 5.484034 5.319296
##  [8] 5.187257 5.684775 5.205131
rnorm(n = 50, mean = 0, sd = 1) # 50 números aleatórios com base na distribuição normal de probabilidade com média 0 e desvio padrão 1.
##  [1] -1.47719509 -1.15297756 -0.46751875 -0.45576108  1.81417201
##  [6] -1.09335881 -3.13593637 -1.64907777  1.11193563  1.04360387
## [11] -1.20017507 -0.81974223 -0.28706373  0.07617426  0.93643325
## [16]  0.21607286 -0.93841720  0.32315106  0.15145379  1.41133316
## [21]  0.23721450  0.80560341  1.25074698 -0.14348129  0.68139431
## [26] -0.88757059  0.51950537  0.82757369 -0.64957078 -1.83963157
## [31]  1.05324292  0.99788872  1.17798868  0.09525722 -0.82813147
## [36]  0.10731686  0.89899963 -1.37659462 -0.47632663 -1.26365122
## [41] -0.12197579  1.20957706 -0.30111882 -1.73630033 -0.66911972
## [46]  2.86927287 -1.37934593  0.50747502 -0.28999750 -1.57176657

4 Objetos e Classes

Para saber como trabalhar com dados no R, é fundamental entender as possíveis estruturas (ou tipos) de dados possíveis. O formato mais básico de dados são os vetores, e a partir deles, outras estruturas mais complexas podem ser construídas. Entretanto, para entender essas estruturas é necessário conhecer a definição de objeto e classe.

  • O que é um objeto?
    • Um símbolo ou uma variável capaz de armazenar qualquer valor ou estrutura de dados.
  • Por quê objetos?
    • Uma maneira simples de acessar os dados armazenados na memória (o R não permite acesso direto à memória) “Tudo no R é um objeto.”
  • O que é uma classe?
    • É a definição de um objeto. Descreve a forma do objeto e como ele será manipulado pelas diferentes funções. “Todo objeto no R tem uma classe”

As principais classes de vetores no R são:

  1. numeric
  2. integer
  3. character
  4. complex
  5. logical
x <- 25
class(x)
## [1] "numeric"

4.1 Vetor

4.1.1 Criação de Vetores

(meu_primeiro_vetor <- c(1,2,3)) # Vetor com números
## [1] 1 2 3
(meu_segundo_vetor <- c("S&P","500")) # Vetor com palavras
## [1] "S&P" "500"

4.1.2 Classes

var1 <- c(367,352,459)
class(var1)
## [1] "numeric"
var2 <- c(367L,352L,459L)
class(var2)
## [1] "integer"

Por quê armazenar um objeto do tipo integer?

object.size(var1);object.size(var2) # O espaço ocupado na memória para um objeto do tipo 'integer' é menor.
## 80 bytes
## 64 bytes
var3 <- c(TRUE,FALSE,FALSE)
class(var3)
## [1] "logical"
var4 <- c(5.2+3i, 3.8+4i)
class(var4)
## [1] "complex"
var5 <- c("João","Matheus","Lineu","Alberto")
class(var5)
## [1] "character"
var6 <- c("João"=10,"Matheus"=9,"Lineu"=8,"Alberto"=10)
class(var6) 
## [1] "numeric"
names(var6)
## [1] "João"    "Matheus" "Lineu"   "Alberto"

4.1.3 Verificação de classe

var1;is.numeric(var1)   # Retorna 'TRUE', pois o objeto 'var1' é do tipo 'numeric'
## [1] 367 352 459
## [1] TRUE
var2;is.integer(var2)   # Retorna 'TRUE', pois o objeto 'var2' é do tipo 'integer'
## [1] 367 352 459
## [1] TRUE
var3;is.character(var3) # Retorna 'FALSE', pois o objeto 'var3' não é do tipo 'character'. Esse objeto é do tipo 'logical'
## [1]  TRUE FALSE FALSE
## [1] FALSE
var3;is.logical(var3)   # Retorna 'TRUE', pois o objeto 'var3' é do tipo 'logical'
## [1]  TRUE FALSE FALSE
## [1] TRUE
var4;is.complex(var4)   # Retorna 'TRUE', pois o objeto 'var4' é do tipo 'complex'
## [1] 5.2+3i 3.8+4i
## [1] TRUE
var5;is.character(var5) # Retorna 'TRUE', pois o objeto 'var5' é do tipo 'character'
## [1] "João"    "Matheus" "Lineu"   "Alberto"
## [1] TRUE
var6;is.character(var6) # Retorna 'FALSE', pois o objeto 'var6' não é do tipo 'character'. Esse objeto é do tipo 'numeric'
##    João Matheus   Lineu Alberto 
##      10       9       8      10
## [1] FALSE

4.1.4 Forçando objeto a mudar de classe

var1;as.character(var1)       # Transforma a classe do objeto 'var1' para 'character'
## [1] 367 352 459
## [1] "367" "352" "459"
var3;as.integer(var3)         # Transforma a classe do objeto 'var3' para 'integer'
## [1]  TRUE FALSE FALSE
## [1] 1 0 0
c(1,0,1);as.logical(c(1,0,1)) # Transforma a classe do vetor 'c(1,0,1)' para 'logical'
## [1] 1 0 1
## [1]  TRUE FALSE  TRUE
var5;as.numeric(var5)         # Não transforma a classe do objeto 'var5' para 'numeric'. Por conta disso, retorna um vetor com 'NA'.
## [1] "João"    "Matheus" "Lineu"   "Alberto"
## Warning: NAs introduzidos por coerção
## [1] NA NA NA NA

4.1.5 Indexação para Vetores

## Vetores com Números
(vetor <- c(1,23,3,47,90,6,7,8, 5 ,6 ,10 , 45)) # Criando um novo vetor de números
##  [1]  1 23  3 47 90  6  7  8  5  6 10 45
vetor[5];vetor[c(1,2,3,4,6)] # Selecionando o elemento de posição 5; Selecionando os elementos da posição 1,2,3,4 e 6.
## [1] 90
## [1]  1 23  3 47  6
vetor[1:3];vetor[seq(1, 3)] # Selecionando os primeiros 3 elementos; Selecionando os primeiros 3 elementos utilizando a função 'seq'.
## [1]  1 23  3
## [1]  1 23  3
vetor[-3];vetor[-c(1,4)] # Removendo o elemento da posição 3; Removendo os elementos da posição 1 e 4.
##  [1]  1 23 47 90  6  7  8  5  6 10 45
##  [1] 23  3 90  6  7  8  5  6 10 45
## Vetores com Nomes
(chr = c("Barack", "Obama")) # Criando um novo vetor de palavras
## [1] "Barack" "Obama"
(names(chr) = c("Nome", "Sobrenome"))
## [1] "Nome"      "Sobrenome"
chr
##      Nome Sobrenome 
##  "Barack"   "Obama"
chr["Nome"]
##     Nome 
## "Barack"

4.1.6 Seleção Condicional para Vetores

(vetor2 <- c(18, 12 , 31 , 56 , 7 , 5 , 9 )) # Criando um novo vetor de números
## [1] 18 12 31 56  7  5  9
vetor > 15;vetor[vetor > 15]
##  [1] FALSE  TRUE FALSE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE
## [12]  TRUE
## [1] 23 47 90 45
vetor > 30 & vetor < 100;vetor[vetor > 30 & vetor < 100] # Operador lógico '&' significa 'e' (and)
##  [1] FALSE FALSE FALSE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE
## [12]  TRUE
## [1] 47 90 45
vetor > 30 | vetor < 100;vetor[vetor > 30 | vetor < 100] # Operador lógico '|' significa 'ou' (or)
##  [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
##  [1]  1 23  3 47 90  6  7  8  5  6 10 45
(chr2 <- letters[1:20])
##  [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q"
## [18] "r" "s" "t"
chr2[1:5]
## [1] "a" "b" "c" "d" "e"
chr2[chr2 == "e"]
## [1] "e"
chr2[chr2 == "b" | chr2 == "f"]
## [1] "b" "f"
which(chr2 == "e") # Retorna a posição em que o elemento "e" se encontra no vetor
## [1] 5

4.2 Fator

Os fatores têm características semelhantes aos vetores de classe ‘character’, mas são armazenados e tratados de maneira diferente. Fator é um tipo de objeto ideal para armazenar dados de variáveis categóricas.

4.2.1 Criação de Fatores

(vec1 <- c("Macho","Femea","Femea","Macho","Macho"))
## [1] "Macho" "Femea" "Femea" "Macho" "Macho"
(fac_vec1 <- factor(vec1))
## [1] Macho Femea Femea Macho Macho
## Levels: Femea Macho
class(vec1)
## [1] "character"
class(fac_vec1)
## [1] "factor"

4.2.2 Variáveis Categóricas Nominais

(animais <- c("Zebra", "Pantera", "Rinoceronte", "Macaco", "Tigre"))
## [1] "Zebra"       "Pantera"     "Rinoceronte" "Macaco"      "Tigre"
(fac_animais <- factor(animais))
## [1] Zebra       Pantera     Rinoceronte Macaco      Tigre      
## Levels: Macaco Pantera Rinoceronte Tigre Zebra
class(fac_animais)
## [1] "factor"
levels(fac_animais)
## [1] "Macaco"      "Pantera"     "Rinoceronte" "Tigre"       "Zebra"

4.2.3 Variáveis Categóricas Ordinais

Dentro de um fator, é possível ordenar os níveis de uma variável categórica ordinal, o que pode facilitar muito o cálculo de estatísticas e criação de gráficos.

(grad <- c("Mestrado", "Doutorado", "Bacharelado", "Mestrado", "Mestrado"))
## [1] "Mestrado"    "Doutorado"   "Bacharelado" "Mestrado"    "Mestrado"
(fac_grad <- factor(grad, ordered = TRUE, levels = c("Doutorado", "Mestrado", "Bacharelado")))
## [1] Mestrado    Doutorado   Bacharelado Mestrado    Mestrado   
## Levels: Doutorado < Mestrado < Bacharelado
levels(fac_grad)
## [1] "Doutorado"   "Mestrado"    "Bacharelado"
is.ordered(fac_grad)
## [1] TRUE
is.ordered(fac_animais)
## [1] FALSE

Como exemplo, abaixo foi utilizada a função summary para mostrar a vantagem de se utilizar um fator.

summary(grad);summary(fac_grad)
##    Length     Class      Mode 
##         5 character character
##   Doutorado    Mestrado Bacharelado 
##           1           3           1

Armazenar os dados categóricos em um fator facilita o cálculo de estatísticas.

Lembrete: Indexação e Seleção Condicional para um fator é parecido com vetor. Por conta disso, essa parte do material foi omitida.

4.3 Matriz

4.3.1 Criação de Matrizes

(matriz <- matrix(1:9, nrow = 3, ncol = 3)) # Preenchimento por coluna
##      [,1] [,2] [,3]
## [1,]    1    4    7
## [2,]    2    5    8
## [3,]    3    6    9
(matriz <- matrix(1:9, nrow = 3, ncol = 3, byrow = TRUE)) # Preenchimento por linha
##      [,1] [,2] [,3]
## [1,]    1    2    3
## [2,]    4    5    6
## [3,]    7    8    9
(matriz <- matrix(c(1,4,5,7),nrow=2,ncol=2)) # Criação de uma matriz de ordem 2
##      [,1] [,2]
## [1,]    1    5
## [2,]    4    7
t(matriz) # Transposta
##      [,1] [,2]
## [1,]    1    4
## [2,]    5    7
solve(matriz) # Inversa
##            [,1]        [,2]
## [1,] -0.5384615  0.38461538
## [2,]  0.3076923 -0.07692308
diag(1:3) # Matriz Diagonal
##      [,1] [,2] [,3]
## [1,]    1    0    0
## [2,]    0    2    0
## [3,]    0    0    3
matriz;rbind(matriz, c(0,1)) # Nova Linha
##      [,1] [,2]
## [1,]    1    5
## [2,]    4    7
##      [,1] [,2]
## [1,]    1    5
## [2,]    4    7
## [3,]    0    1
matriz;cbind(matriz, c(2,3)) # Nova Coluna
##      [,1] [,2]
## [1,]    1    5
## [2,]    4    7
##      [,1] [,2] [,3]
## [1,]    1    5    2
## [2,]    4    7    3

4.3.2 Dimensões da Matriz

dim(matriz)  # N° de linhas e colunas
## [1] 2 2
nrow(matriz) # N° de linhas
## [1] 2
ncol(matriz) # N° de colunas
## [1] 2

4.3.3 Operações com Matrizes

(matriz1 <- matrix(1:16,nrow = 4, ncol = 4))
##      [,1] [,2] [,3] [,4]
## [1,]    1    5    9   13
## [2,]    2    6   10   14
## [3,]    3    7   11   15
## [4,]    4    8   12   16
(matriz2 <- matrix(seq(1,32,by=2),nrow=4,ncol=4))
##      [,1] [,2] [,3] [,4]
## [1,]    1    9   17   25
## [2,]    3   11   19   27
## [3,]    5   13   21   29
## [4,]    7   15   23   31
matriz2 + 3 # Adição
##      [,1] [,2] [,3] [,4]
## [1,]    4   12   20   28
## [2,]    6   14   22   30
## [3,]    8   16   24   32
## [4,]   10   18   26   34
matriz2 - 1 # Subtração
##      [,1] [,2] [,3] [,4]
## [1,]    0    8   16   24
## [2,]    2   10   18   26
## [3,]    4   12   20   28
## [4,]    6   14   22   30
matriz2 * 3 # Multiplicação
##      [,1] [,2] [,3] [,4]
## [1,]    3   27   51   75
## [2,]    9   33   57   81
## [3,]   15   39   63   87
## [4,]   21   45   69   93
matriz2 / 2 # Divisão
##      [,1] [,2] [,3] [,4]
## [1,]  0.5  4.5  8.5 12.5
## [2,]  1.5  5.5  9.5 13.5
## [3,]  2.5  6.5 10.5 14.5
## [4,]  3.5  7.5 11.5 15.5
matriz1 * matriz2 # Multiplicação elemento por elemento
##      [,1] [,2] [,3] [,4]
## [1,]    1   45  153  325
## [2,]    6   66  190  378
## [3,]   15   91  231  435
## [4,]   28  120  276  496
matriz1 %*% matriz2 # Multiplicação Matricial
##      [,1] [,2] [,3] [,4]
## [1,]  152  376  600  824
## [2,]  168  424  680  936
## [3,]  184  472  760 1048
## [4,]  200  520  840 1160

4.3.4 Indexação para Matrizes

(matriz <- matrix(c(1,4,5,7),nrow=2,ncol=2))
##      [,1] [,2]
## [1,]    1    5
## [2,]    4    7
matriz[1,2] # Elemento da linha 1 e coluna 2
## [1] 5
matriz[1,]  # Elementos da linha 1
## [1] 1 5
matriz[, 2] # Elementos da coluna 2
## [1] 5 7
matriz[, 2, drop = FALSE] # Elementos da coluna 2 (Mantendo o formato de matriz)
##      [,1]
## [1,]    5
## [2,]    7

4.3.5 Seleção Condicional para Matrizes

matriz
##      [,1] [,2]
## [1,]    1    5
## [2,]    4    7
matriz == 1;matriz[matriz == 1] # Seleciona os elementos iguais a 1
##       [,1]  [,2]
## [1,]  TRUE FALSE
## [2,] FALSE FALSE
## [1] 1
matriz > 4;matriz[matriz > 4]   # Seleciona os elementos maiores que 4
##       [,1] [,2]
## [1,] FALSE TRUE
## [2,] FALSE TRUE
## [1] 5 7
matriz >=4 & matriz <= 5;matriz[matriz >=4 & matriz <= 5] # Seleciona os elementos maiores ou iguais a 4 E menores ou iguais a 5
##       [,1]  [,2]
## [1,] FALSE  TRUE
## [2,]  TRUE FALSE
## [1] 4 5
matriz == 1 | matriz == 5;matriz[matriz == 1 | matriz == 5] # Seleciona o elemento igual a 1 ou igual a 5
##       [,1]  [,2]
## [1,]  TRUE  TRUE
## [2,] FALSE FALSE
## [1] 1 5

4.4 Data frame

4.4.1 Criação de Dataframes

  • Dataframe com duas variáveis
data.frame(Nomes=c("Marcelo","Fernanda"),Notas=c(8,9))
##      Nomes Notas
## 1  Marcelo     8
## 2 Fernanda     9
  • Dataframe com quatro variáveis
país = c("EUA", "Dinamarca", "Holanda", "Espanha", "Brasil")
nome = c("Maurício", "Pedro", "Aline", "Beatriz", "Marta")
altura = c(1.78, 1.72, 1.63, 1.59, 1.63)
peso = c(50, 76, 62, 55, 120)

(pesquisa <- data.frame(país, nome, altura, peso))
##        país     nome altura peso
## 1       EUA Maurício   1.78   50
## 2 Dinamarca    Pedro   1.72   76
## 3   Holanda    Aline   1.63   62
## 4   Espanha  Beatriz   1.59   55
## 5    Brasil    Marta   1.63  120

4.4.2 Informações sobre o dataframe

class(pesquisa) # Classe do dataframe
## [1] "data.frame"
str(pesquisa)   # Estrutura do dataframe
## 'data.frame':    5 obs. of  4 variables:
##  $ país  : Factor w/ 5 levels "Brasil","Dinamarca",..: 4 2 5 3 1
##  $ nome  : Factor w/ 5 levels "Aline","Beatriz",..: 4 5 1 2 3
##  $ altura: num  1.78 1.72 1.63 1.59 1.63
##  $ peso  : num  50 76 62 55 120
dim(pesquisa)   # Dimensões (Número de linhas e Colunas)
## [1] 5 4
nrow(pesquisa)  # Número de Linhas
## [1] 5
ncol(pesquisa)  # Número de Colunas
## [1] 4

4.4.3 Adicionar uma nova coluna ou linha e renomear

rbind(pesquisa,data.frame(país="China",nome="Bruce",altura=1.82,peso=70)) # Nova Linha
##        país     nome altura peso
## 1       EUA Maurício   1.78   50
## 2 Dinamarca    Pedro   1.72   76
## 3   Holanda    Aline   1.63   62
## 4   Espanha  Beatriz   1.59   55
## 5    Brasil    Marta   1.63  120
## 6     China    Bruce   1.82   70
cbind(pesquisa,IMC = c(50,76,62,55,120) / c(1.78,1.72,1.63,1.59,1.63)^2 ) # Nova Coluna
##        país     nome altura peso      IMC
## 1       EUA Maurício   1.78   50 15.78084
## 2 Dinamarca    Pedro   1.72   76 25.68956
## 3   Holanda    Aline   1.63   62 23.33547
## 4   Espanha  Beatriz   1.59   55 21.75547
## 5    Brasil    Marta   1.63  120 45.16542
rownames(pesquisa) # Nome das Linhas
## [1] "1" "2" "3" "4" "5"
colnames(pesquisa) # Nome das Colunas
## [1] "país"   "nome"   "altura" "peso"
rownames(pesquisa) <- c("Primeiro","Segundo","Terceiro","Quarto","Quinto") # Alterando nome das linhas
colnames(pesquisa) <- c("PAÍS","NOME","ALTURA","PESO") # Alterando nome das colunas

4.4.4 Indexação para Dataframes

pesquisa
##               PAÍS     NOME ALTURA PESO
## Primeiro       EUA Maurício   1.78   50
## Segundo  Dinamarca    Pedro   1.72   76
## Terceiro   Holanda    Aline   1.63   62
## Quarto     Espanha  Beatriz   1.59   55
## Quinto      Brasil    Marta   1.63  120
pesquisa[4, ] # Selecionando a 4° linha do dataframe
##           PAÍS    NOME ALTURA PESO
## Quarto Espanha Beatriz   1.59   55
pesquisa[1:5,];head(pesquisa,5) # Selecionando as primeiras 5 linhas
##               PAÍS     NOME ALTURA PESO
## Primeiro       EUA Maurício   1.78   50
## Segundo  Dinamarca    Pedro   1.72   76
## Terceiro   Holanda    Aline   1.63   62
## Quarto     Espanha  Beatriz   1.59   55
## Quinto      Brasil    Marta   1.63  120
##               PAÍS     NOME ALTURA PESO
## Primeiro       EUA Maurício   1.78   50
## Segundo  Dinamarca    Pedro   1.72   76
## Terceiro   Holanda    Aline   1.63   62
## Quarto     Espanha  Beatriz   1.59   55
## Quinto      Brasil    Marta   1.63  120
pesquisa[3:5,];tail(pesquisa,3) # Selecionando as últimas 3 linhas
##             PAÍS    NOME ALTURA PESO
## Terceiro Holanda   Aline   1.63   62
## Quarto   Espanha Beatriz   1.59   55
## Quinto    Brasil   Marta   1.63  120
##             PAÍS    NOME ALTURA PESO
## Terceiro Holanda   Aline   1.63   62
## Quarto   Espanha Beatriz   1.59   55
## Quinto    Brasil   Marta   1.63  120
pesquisa[,2];pesquisa$NOME # Selecionando a 2° Coluna (Pelo número da coluna e pelo nome da coluna)
## [1] Maurício Pedro    Aline    Beatriz  Marta   
## Levels: Aline Beatriz Marta Maurício Pedro
## [1] Maurício Pedro    Aline    Beatriz  Marta   
## Levels: Aline Beatriz Marta Maurício Pedro
pesquisa[3,1];pesquisa$PAÍS[3] # Selecionando a 3° linha da 1° coluna (Por números e pelo nome da coluna)
## [1] Holanda
## Levels: Brasil Dinamarca Espanha EUA Holanda
## [1] Holanda
## Levels: Brasil Dinamarca Espanha EUA Holanda
pesquisa[1, "NOME"] # Selecionando a 1° linha da 2° coluna
## [1] Maurício
## Levels: Aline Beatriz Marta Maurício Pedro

4.4.5 Seleção Condicional para Dataframes

pesquisa
##               PAÍS     NOME ALTURA PESO
## Primeiro       EUA Maurício   1.78   50
## Segundo  Dinamarca    Pedro   1.72   76
## Terceiro   Holanda    Aline   1.63   62
## Quarto     Espanha  Beatriz   1.59   55
## Quinto      Brasil    Marta   1.63  120
pesquisa[pesquisa$PESO == 50,] # Seleciona a linha com peso igual a 50
##          PAÍS     NOME ALTURA PESO
## Primeiro  EUA Maurício   1.78   50
pesquisa[pesquisa$ALTURA>=1.65,] # Seleciona as linhas com altura maior ou igual a 1.65
##               PAÍS     NOME ALTURA PESO
## Primeiro       EUA Maurício   1.78   50
## Segundo  Dinamarca    Pedro   1.72   76
pesquisa[pesquisa$ALTURA>=1.65,"NOME"] # Seleciona as linhas com altura maior ou igual a 1.65 da coluna 'NOME'
## [1] Maurício Pedro   
## Levels: Aline Beatriz Marta Maurício Pedro
pesquisa[pesquisa$PESO > 50 & pesquisa$PESO < 70,];subset(pesquisa, PESO > 50 & PESO < 70) # Seleciona as linhas com peso maior que 50 e menor que 70.
##             PAÍS    NOME ALTURA PESO
## Terceiro Holanda   Aline   1.63   62
## Quarto   Espanha Beatriz   1.59   55
##             PAÍS    NOME ALTURA PESO
## Terceiro Holanda   Aline   1.63   62
## Quarto   Espanha Beatriz   1.59   55
pesquisa[pesquisa$PESO > 50 & pesquisa$ALTURA < 1.70,];subset(pesquisa, PESO > 50 & ALTURA < 1.70) # Seleciona as linhas com peso maior que 50 e altura menor que 1.70.
##             PAÍS    NOME ALTURA PESO
## Terceiro Holanda   Aline   1.63   62
## Quarto   Espanha Beatriz   1.59   55
## Quinto    Brasil   Marta   1.63  120
##             PAÍS    NOME ALTURA PESO
## Terceiro Holanda   Aline   1.63   62
## Quarto   Espanha Beatriz   1.59   55
## Quinto    Brasil   Marta   1.63  120

4.5 Lista

4.5.1 Criação de Listas

É possível inserir diferentes classes de objetos em uma lista

# Lista
(lista <- list(1:10,c("Maria", "João", "Alfredo"),rnorm(10),pesquisa))
## [[1]]
##  [1]  1  2  3  4  5  6  7  8  9 10
## 
## [[2]]
## [1] "Maria"   "João"    "Alfredo"
## 
## [[3]]
##  [1]  0.07455415  1.32338184 -1.53909782 -0.07658470  1.03077490
##  [6]  0.42375507 -0.41688044  0.33167664  0.22794476 -1.48840791
## 
## [[4]]
##               PAÍS     NOME ALTURA PESO
## Primeiro       EUA Maurício   1.78   50
## Segundo  Dinamarca    Pedro   1.72   76
## Terceiro   Holanda    Aline   1.63   62
## Quarto     Espanha  Beatriz   1.59   55
## Quinto      Brasil    Marta   1.63  120
# Lista Nomeada
(lista <- list(Sequencia=1:10,Nomes=c("Maria", "João", "Alfredo"),NumAleat=rnorm(10),Dataframe=pesquisa))
## $Sequencia
##  [1]  1  2  3  4  5  6  7  8  9 10
## 
## $Nomes
## [1] "Maria"   "João"    "Alfredo"
## 
## $NumAleat
##  [1] -1.92875105 -0.87476553  0.02253412  0.53409726  0.31445468
##  [6]  0.05568247 -1.20766534  1.08583991  0.12362458 -1.68124533
## 
## $Dataframe
##               PAÍS     NOME ALTURA PESO
## Primeiro       EUA Maurício   1.78   50
## Segundo  Dinamarca    Pedro   1.72   76
## Terceiro   Holanda    Aline   1.63   62
## Quarto     Espanha  Beatriz   1.59   55
## Quinto      Brasil    Marta   1.63  120
class(lista)
## [1] "list"
length(lista)
## [1] 4
str(lista)
## List of 4
##  $ Sequencia: int [1:10] 1 2 3 4 5 6 7 8 9 10
##  $ Nomes    : chr [1:3] "Maria" "João" "Alfredo"
##  $ NumAleat : num [1:10] -1.9288 -0.8748 0.0225 0.5341 0.3145 ...
##  $ Dataframe:'data.frame':   5 obs. of  4 variables:
##   ..$ PAÍS  : Factor w/ 5 levels "Brasil","Dinamarca",..: 4 2 5 3 1
##   ..$ NOME  : Factor w/ 5 levels "Aline","Beatriz",..: 4 5 1 2 3
##   ..$ ALTURA: num [1:5] 1.78 1.72 1.63 1.59 1.63
##   ..$ PESO  : num [1:5] 50 76 62 55 120

4.5.2 Indexação para Listas

lista[1];str(lista[1]) # Extrai o 1° elemento da lista (Retorna uma lista com um elemento)
## $Sequencia
##  [1]  1  2  3  4  5  6  7  8  9 10
## List of 1
##  $ Sequencia: int [1:10] 1 2 3 4 5 6 7 8 9 10
lista[[1]];str(lista[[1]]) # Extrai o 1° elemento da lista (Retorna somente o elemento)
##  [1]  1  2  3  4  5  6  7  8  9 10
##  int [1:10] 1 2 3 4 5 6 7 8 9 10
lista[[2]];lista[["Nomes"]] # Extrai o 2° elemento da lista
## [1] "Maria"   "João"    "Alfredo"
## [1] "Maria"   "João"    "Alfredo"
lista[[1]][3] # Extrai o 3° item do 1° elemento da lista
## [1] 3
lista$NumAleat[4] # Extrai o 4° item do elemento 'NumAleat' da lista
## [1] 0.5340973
lista$Nomes[c(2,3)] # Extrai o 2° e 3° item do elemento 'Nomes' da lista
## [1] "João"    "Alfredo"
lista$Dataframe$Nome # Extrai a coluna 'NOME' do elemento 'Dataframe' da lista
## NULL

4.5.3 Seleção Condicional para Listas

lista
## $Sequencia
##  [1]  1  2  3  4  5  6  7  8  9 10
## 
## $Nomes
## [1] "Maria"   "João"    "Alfredo"
## 
## $NumAleat
##  [1] -1.92875105 -0.87476553  0.02253412  0.53409726  0.31445468
##  [6]  0.05568247 -1.20766534  1.08583991  0.12362458 -1.68124533
## 
## $Dataframe
##               PAÍS     NOME ALTURA PESO
## Primeiro       EUA Maurício   1.78   50
## Segundo  Dinamarca    Pedro   1.72   76
## Terceiro   Holanda    Aline   1.63   62
## Quarto     Espanha  Beatriz   1.59   55
## Quinto      Brasil    Marta   1.63  120
lista[[3]][lista[[3]]>=0] # Extrai os itens positivos do terceiro elemento da lista
## [1] 0.02253412 0.53409726 0.31445468 0.05568247 1.08583991 0.12362458
lista$Sequencia[lista$Sequencia>=5] # Extrai os itens maiores que 5 do elemento 'Sequencia' da lista
## [1]  5  6  7  8  9 10

5 Leitura de dados

  • Formatos comuns

  • txt
  • csv
  • xlsx

5.1 txt

dados_txt <- read.table(file = "MingotiAnA4.txt",
                        header = TRUE,
                        sep = '\t',
                        dec = '.')
head(dados_txt)
##   emp grp    x1    x2   x3   x4
## 1   1   1 -0.45 -0.41 1.09 0.45
## 2   2   1 -0.56 -0.31 1.51 0.16
## 3   3   1  0.06  0.02 1.01 0.40
## 4   4   1 -0.07 -0.09 1.45 0.26
## 5   5   1 -0.10 -0.09 1.56 0.67
## 6   6   1 -0.14 -0.07 0.71 0.28

5.2 csv

dados_csv <- read.csv(file = "MingotiAnA4.csv",
                      header = TRUE,
                      sep = ';',
                      dec = '.')

head(dados_csv)
##   emp grp    x1    x2   x3   x4
## 1   1   1 -0.45 -0.41 1.09 0.45
## 2   2   1 -0.56 -0.31 1.51 0.16
## 3   3   1  0.06  0.02 1.01 0.40
## 4   4   1 -0.07 -0.09 1.45 0.26
## 5   5   1 -0.10 -0.09 1.56 0.67
## 6   6   1 -0.14 -0.07 0.71 0.28

5.3 xlsx

library(readxl)
dados_xlsx <- read_excel(path = "MingotiAnA4.xlsx",
                         sheet = 1)

head(dados_xlsx);class(dados_xlsx)
## # A tibble: 6 x 6
##     emp   grp x1    x2    x3    x4   
##   <dbl> <dbl> <chr> <chr> <chr> <chr>
## 1     1     1 -0.45 -0.41 1.09  0.45 
## 2     2     1 -0.56 -0.31 1.51  0.16 
## 3     3     1 0.06  0.02  1.01  0.4  
## 4     4     1 -0.07 -0.09 1.45  0.26 
## 5     5     1 -0.1  -0.09 1.56  0.67 
## 6     6     1 -0.14 -0.07 0.71  0.28
## [1] "tbl_df"     "tbl"        "data.frame"
as.data.frame(head(dados_xlsx))
##   emp grp    x1    x2   x3   x4
## 1   1   1 -0.45 -0.41 1.09 0.45
## 2   2   1 -0.56 -0.31 1.51 0.16
## 3   3   1  0.06  0.02 1.01  0.4
## 4   4   1 -0.07 -0.09 1.45 0.26
## 5   5   1  -0.1 -0.09 1.56 0.67
## 6   6   1 -0.14 -0.07 0.71 0.28

6 Gráficos com o pacote base (graphics)

6.1 Fazendo o primeiro gráfico

summary(dados_txt)
##       emp             grp              x1                x2           
##  Min.   : 1.00   Min.   :1.000   Min.   :-0.5600   Min.   :-0.410000  
##  1st Qu.:12.25   1st Qu.:1.000   1st Qu.:-0.0700   1st Qu.:-0.052500  
##  Median :23.50   Median :2.000   Median : 0.1200   Median : 0.035000  
##  Mean   :23.50   Mean   :1.543   Mean   : 0.0963   Mean   :-0.006957  
##  3rd Qu.:34.75   3rd Qu.:2.000   3rd Qu.: 0.2150   3rd Qu.: 0.070000  
##  Max.   :46.00   Max.   :2.000   Max.   : 0.5800   Max.   : 0.140000  
##        x3              x4        
##  Min.   :0.330   Min.   :0.1300  
##  1st Qu.:1.370   1st Qu.:0.2850  
##  Median :1.935   Median :0.4250  
##  Mean   :2.033   Mean   :0.4317  
##  3rd Qu.:2.425   3rd Qu.:0.5475  
##  Max.   :5.060   Max.   :0.9500
plot(dados_txt)

6.2 Análises Univariadas

barplot(table(dados_txt$grp))

plot(dados_txt$x1)

hist(dados_txt$x1)

plot(density(dados_txt$x1))

boxplot(dados_txt$x1)

6.3 Análises Bivariadas

plot(dados_txt$x1 ~ as.factor(dados_txt$grp))

plot(dados_txt$x1 ~ dados_txt$x2)

6.4 Alterando Cores, Eixos, Títulos e Legendas

plot(dados_txt$x1 ~ dados_txt$x2) # exemplo

plot(dados_txt$x1 ~ dados_txt$x2,
     xlab = 'Variável x2',
     ylab = 'Variável x3') # eixos

plot(dados_txt$x1 ~ dados_txt$x2,
     xlab = 'Variável x2',
     ylab = 'Variável x3',
     main = 'x3 em função de x1') # título

plot(dados_txt$x1 ~ dados_txt$x2,
     xlab = 'Variável x2',
     ylab = 'Variável x3',
     main = 'x3 em função de x1',
     col = 'blue') # cores (nome) - azul

plot(dados_txt$x1 ~ dados_txt$x2,
     xlab = 'Variável x2',
     ylab = 'Variável x3',
     main = 'x3 em função de x1',
     col = 2) # cores (número) - vermelho

plot(dados_txt$x1 ~ dados_txt$x2,
     xlab = 'Variável x2',
     ylab = 'Variável x3',
     main = 'x3 em função de x1',
     col = '#00cc00') # cores (html) - verde

plot(dados_txt$x1 ~ dados_txt$x2,
     xlab = 'Variável x2',
     ylab = 'Variável x3',
     main = 'x3 em função de x1',
     pch = 19) # estilos de pontos (experimente entre 1 e 127)

6.5 Análises Trivariadas

plot(dados_txt$x1 ~ dados_txt$x2,
     xlab = 'Variável x2',
     ylab = 'Variável x3',
     main = 'x3 em função de x1',
     pch = 19,
     col = dados_txt$grp)
legend("top", legend=c("Grupo 1", "Grupo 2"),
       col=c(1,2), bty="o", pch=c(19,19)) ## Acrescenta legenda

6.6 Demonstração

demo(graphics)
## 
## 
##  demo(graphics)
##  ---- ~~~~~~~~
## 
## > #  Copyright (C) 1997-2009 The R Core Team
## > 
## > require(datasets)
## 
## > require(grDevices); require(graphics)
## 
## > ## Here is some code which illustrates some of the differences between
## > ## R and S graphics capabilities.  Note that colors are generally specified
## > ## by a character string name (taken from the X11 rgb.txt file) and that line
## > ## textures are given similarly.  The parameter "bg" sets the background
## > ## parameter for the plot and there is also an "fg" parameter which sets
## > ## the foreground color.
## > 
## > 
## > x <- stats::rnorm(50)
## 
## > opar <- par(bg = "white")
## 
## > plot(x, ann = FALSE, type = "n")

## 
## > abline(h = 0, col = gray(.90))
## 
## > lines(x, col = "green4", lty = "dotted")
## 
## > points(x, bg = "limegreen", pch = 21)
## 
## > title(main = "Simple Use of Color In a Plot",
## +       xlab = "Just a Whisper of a Label",
## +       col.main = "blue", col.lab = gray(.8),
## +       cex.main = 1.2, cex.lab = 1.0, font.main = 4, font.lab = 3)
## 
## > ## A little color wheel.    This code just plots equally spaced hues in
## > ## a pie chart.    If you have a cheap SVGA monitor (like me) you will
## > ## probably find that numerically equispaced does not mean visually
## > ## equispaced.  On my display at home, these colors tend to cluster at
## > ## the RGB primaries.  On the other hand on the SGI Indy at work the
## > ## effect is near perfect.
## > 
## > par(bg = "gray")
## 
## > pie(rep(1,24), col = rainbow(24), radius = 0.9)

## 
## > title(main = "A Sample Color Wheel", cex.main = 1.4, font.main = 3)
## 
## > title(xlab = "(Use this as a test of monitor linearity)",
## +       cex.lab = 0.8, font.lab = 3)
## 
## > ## We have already confessed to having these.  This is just showing off X11
## > ## color names (and the example (from the postscript manual) is pretty "cute".
## > 
## > pie.sales <- c(0.12, 0.3, 0.26, 0.16, 0.04, 0.12)
## 
## > names(pie.sales) <- c("Blueberry", "Cherry",
## +              "Apple", "Boston Cream", "Other", "Vanilla Cream")
## 
## > pie(pie.sales,
## +     col = c("purple","violetred1","green3","cornsilk","cyan","white"))

## 
## > title(main = "January Pie Sales", cex.main = 1.8, font.main = 1)
## 
## > title(xlab = "(Don't try this at home kids)", cex.lab = 0.8, font.lab = 3)
## 
## > ## Boxplots:  I couldn't resist the capability for filling the "box".
## > ## The use of color seems like a useful addition, it focuses attention
## > ## on the central bulk of the data.
## > 
## > par(bg="cornsilk")
## 
## > n <- 10
## 
## > g <- gl(n, 100, n*100)
## 
## > x <- rnorm(n*100) + sqrt(as.numeric(g))
## 
## > boxplot(split(x,g), col="lavender", notch=TRUE)

## 
## > title(main="Notched Boxplots", xlab="Group", font.main=4, font.lab=1)
## 
## > ## An example showing how to fill between curves.
## > 
## > par(bg="white")
## 
## > n <- 100
## 
## > x <- c(0,cumsum(rnorm(n)))
## 
## > y <- c(0,cumsum(rnorm(n)))
## 
## > xx <- c(0:n, n:0)
## 
## > yy <- c(x, rev(y))
## 
## > plot(xx, yy, type="n", xlab="Time", ylab="Distance")

## 
## > polygon(xx, yy, col="gray")
## 
## > title("Distance Between Brownian Motions")
## 
## > ## Colored plot margins, axis labels and titles.    You do need to be
## > ## careful with these kinds of effects.    It's easy to go completely
## > ## over the top and you can end up with your lunch all over the keyboard.
## > ## On the other hand, my market research clients love it.
## > 
## > x <- c(0.00, 0.40, 0.86, 0.85, 0.69, 0.48, 0.54, 1.09, 1.11, 1.73, 2.05, 2.02)
## 
## > par(bg="lightgray")
## 
## > plot(x, type="n", axes=FALSE, ann=FALSE)

## 
## > usr <- par("usr")
## 
## > rect(usr[1], usr[3], usr[2], usr[4], col="cornsilk", border="black")
## 
## > lines(x, col="blue")
## 
## > points(x, pch=21, bg="lightcyan", cex=1.25)
## 
## > axis(2, col.axis="blue", las=1)
## 
## > axis(1, at=1:12, lab=month.abb, col.axis="blue")
## 
## > box()
## 
## > title(main= "The Level of Interest in R", font.main=4, col.main="red")
## 
## > title(xlab= "1996", col.lab="red")
## 
## > ## A filled histogram, showing how to change the font used for the
## > ## main title without changing the other annotation.
## > 
## > par(bg="cornsilk")
## 
## > x <- rnorm(1000)
## 
## > hist(x, xlim=range(-4, 4, x), col="lavender", main="")

## 
## > title(main="1000 Normal Random Variates", font.main=3)
## 
## > ## A scatterplot matrix
## > ## The good old Iris data (yet again)
## > 
## > pairs(iris[1:4], main="Edgar Anderson's Iris Data", font.main=4, pch=19)

## 
## > pairs(iris[1:4], main="Edgar Anderson's Iris Data", pch=21,
## +       bg = c("red", "green3", "blue")[unclass(iris$Species)])

## 
## > ## Contour plotting
## > ## This produces a topographic map of one of Auckland's many volcanic "peaks".
## > 
## > x <- 10*1:nrow(volcano)
## 
## > y <- 10*1:ncol(volcano)
## 
## > lev <- pretty(range(volcano), 10)
## 
## > par(bg = "lightcyan")
## 
## > pin <- par("pin")
## 
## > xdelta <- diff(range(x))
## 
## > ydelta <- diff(range(y))
## 
## > xscale <- pin[1]/xdelta
## 
## > yscale <- pin[2]/ydelta
## 
## > scale <- min(xscale, yscale)
## 
## > xadd <- 0.5*(pin[1]/scale - xdelta)
## 
## > yadd <- 0.5*(pin[2]/scale - ydelta)
## 
## > plot(numeric(0), numeric(0),
## +      xlim = range(x)+c(-1,1)*xadd, ylim = range(y)+c(-1,1)*yadd,
## +      type = "n", ann = FALSE)

## 
## > usr <- par("usr")
## 
## > rect(usr[1], usr[3], usr[2], usr[4], col="green3")
## 
## > contour(x, y, volcano, levels = lev, col="yellow", lty="solid", add=TRUE)
## 
## > box()
## 
## > title("A Topographic Map of Maunga Whau", font= 4)
## 
## > title(xlab = "Meters North", ylab = "Meters West", font= 3)
## 
## > mtext("10 Meter Contour Spacing", side=3, line=0.35, outer=FALSE,
## +       at = mean(par("usr")[1:2]), cex=0.7, font=3)
## 
## > ## Conditioning plots
## > 
## > par(bg="cornsilk")
## 
## > coplot(lat ~ long | depth, data = quakes, pch = 21, bg = "green3")

## 
## > par(opar)


João Matheus S. K. T. Hneda

Lineu Alberto C. de Freitas

Aula 1 - 27/04/2019 - PET-Estatística (UFPR)