Universidade Federal do Paraná
Curso de Estatística
CE 083 -
Estatística Computacional I - 2014/2
Prof. Dr. Walmes Marques Zeviani
Tabela de conteúdo
##-----------------------------------------------------------------------------
## Usando sequência regulares para representar, por exemplo, planos amostrais.
## Para representar 3 alunos entrevistados do 1 ao 4 ano.
rep(1:4, each=3)
## [1] 1 1 1 2 2 2 3 3 3 4 4 4
## Convertendo para fator.
x <- as.factor(rep(1:4, each=3))
str(x)
## Factor w/ 4 levels "1","2","3","4": 1 1 1 2 2 2 3 3 3 4 ...
## Criando um fator.
ano <- factor(rep(1:4, each=3),
labels=c("ano1","ano2","ano3","ano4"))
str(ano)
## Factor w/ 4 levels "ano1","ano2",..: 1 1 1 2 2 2 3 3 3 4 ...
##-----------------------------------------------------------------------------
## Identificando o ano e o índice do aluno.
aluno <- rep(1:3, times=4)
## cbind() gera matrizes quando recebe vetores. Força o fator a virar
## integer.
cbind(ano, aluno)
## ano aluno
## [1,] 1 1
## [2,] 1 2
## [3,] 1 3
## [4,] 2 1
## [5,] 2 2
## [6,] 2 3
## [7,] 3 1
## [8,] 3 2
## [9,] 3 3
## [10,] 4 1
## [11,] 4 2
## [12,] 4 3
## data.frame não força a conversão de ninguém porque as colunas podem
## ter conteúdo de tipo diferente.
data.frame(ano, aluno)
## ano aluno
## 1 ano1 1
## 2 ano1 2
## 3 ano1 3
## 4 ano2 1
## 5 ano2 2
## 6 ano2 3
## 7 ano3 1
## 8 ano3 2
## 9 ano3 3
## 10 ano4 1
## 11 ano4 2
## 12 ano4 3
##-----------------------------------------------------------------------------
## Criando fatores com a função gl(). Gera sequência de níveis.
x <- gl(n=3, k=5) ## equivalente à as.factor(rep(1:k, each=n)).
str(x)
## Factor w/ 3 levels "1","2","3": 1 1 1 1 1 2 2 2 2 2 ...
## Troca o rótulo dos níveis.
levels(x) <- c("PR","SC","RS")
str(x)
## Factor w/ 3 levels "PR","SC","RS": 1 1 1 1 1 2 2 2 2 2 ...
## Já cria com os rótulos.
x <- gl(3, 5, labels=c("PR","SC","RS"))
str(x)
## Factor w/ 3 levels "PR","SC","RS": 1 1 1 1 1 2 2 2 2 2 ...
##-----------------------------------------------------------------------------
## Para criar uma tabela que contém mais de dois fatores e seus níveis
## são combiandos cartesianamente, ou seja, exite todas as combinações
## possíveis entre eles.
## Para dois fatores a lógica é simples.
cbind(rep(1:3, times=4), rep(1:4, each=3))
## [,1] [,2]
## [1,] 1 1
## [2,] 2 1
## [3,] 3 1
## [4,] 1 2
## [5,] 2 2
## [6,] 3 2
## [7,] 1 3
## [8,] 2 3
## [9,] 3 3
## [10,] 1 4
## [11,] 2 4
## [12,] 3 4
## Usando a função expand.grid() para isso.
eg <- expand.grid(1:3, 1:4)
str(eg)
## 'data.frame': 12 obs. of 2 variables:
## $ Var1: int 1 2 3 1 2 3 1 2 3 1 ...
## $ Var2: int 1 1 1 2 2 2 3 3 3 4 ...
## - attr(*, "out.attrs")=List of 2
## ..$ dim : int 3 4
## ..$ dimnames:List of 2
## .. ..$ Var1: chr "Var1=1" "Var1=2" "Var1=3"
## .. ..$ Var2: chr "Var2=1" "Var2=2" "Var2=3" "Var2=4"
## Mais de duas variáveis e com nomes.
eg <- expand.grid(classe=1:4, casal=1:3, sexo=c("M","F"))
str(eg)
## 'data.frame': 24 obs. of 3 variables:
## $ classe: int 1 2 3 4 1 2 3 4 1 2 ...
## $ casal : int 1 1 1 1 2 2 2 2 3 3 ...
## $ sexo : Factor w/ 2 levels "M","F": 1 1 1 1 1 1 1 1 1 1 ...
## - attr(*, "out.attrs")=List of 2
## ..$ dim : Named int 4 3 2
## .. ..- attr(*, "names")= chr "classe" "casal" "sexo"
## ..$ dimnames:List of 3
## .. ..$ classe: chr "classe=1" "classe=2" "classe=3" "classe=4"
## .. ..$ casal : chr "casal=1" "casal=2" "casal=3"
## .. ..$ sexo : chr "sexo=M" "sexo=F"
eg
## classe casal sexo
## 1 1 1 M
## 2 2 1 M
## 3 3 1 M
## 4 4 1 M
## 5 1 2 M
## 6 2 2 M
## 7 3 2 M
## 8 4 2 M
## 9 1 3 M
## 10 2 3 M
## 11 3 3 M
## 12 4 3 M
## 13 1 1 F
## 14 2 1 F
## 15 3 1 F
## 16 4 1 F
## 17 1 2 F
## 18 2 2 F
## 19 3 2 F
## 20 4 2 F
## 21 1 3 F
## 22 2 3 F
## 23 3 3 F
## 24 4 3 F
eg <- expand.grid(sexo=c("M","F"), casal=1:3, classe=1:4,
KEEP.OUT.ATTRS=FALSE)
eg <- rev(eg) ## Troca a ordem das colunas.
eg
## classe casal sexo
## 1 1 1 M
## 2 1 1 F
## 3 1 2 M
## 4 1 2 F
## 5 1 3 M
## 6 1 3 F
## 7 2 1 M
## 8 2 1 F
## 9 2 2 M
## 10 2 2 F
## 11 2 3 M
## 12 2 3 F
## 13 3 1 M
## 14 3 1 F
## 15 3 2 M
## 16 3 2 F
## 17 3 3 M
## 18 3 3 F
## 19 4 1 M
## 20 4 1 F
## 21 4 2 M
## 22 4 2 F
## 23 4 3 M
## 24 4 3 F
## A primeira variável declarada troca de valores mais rápido, a última
## troca devagar e por isso a ordenação dos níveis é hierarquica.
eg <- expand.grid(classe=1:3, par=1:4, sexo=c("M","F"),
stringsAsFactors=FALSE, KEEP.OUT.ATTRS=FALSE)
str(eg)
## 'data.frame': 24 obs. of 3 variables:
## $ classe: int 1 2 3 1 2 3 1 2 3 1 ...
## $ par : int 1 1 1 2 2 2 3 3 3 4 ...
## $ sexo : chr "M" "M" "M" "M" ...
dput(eg)
## structure(list(classe = c(1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L,
## 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L),
## par = c(1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L, 4L, 4L, 4L, 1L,
## 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L, 4L, 4L, 4L), sexo = c("M",
## "M", "M", "M", "M", "M", "M", "M", "M", "M", "M", "M", "F",
## "F", "F", "F", "F", "F", "F", "F", "F", "F", "F", "F")), .Names = c("classe",
## "par", "sexo"), class = "data.frame", row.names = c(NA, -24L))
##-----------------------------------------------------------------------------
## Classificar valores em intervalos.
## Notas de 30 alunos, de 0 à 10.
notas <- round(10*runif(30), 2)
notas
## [1] 4.20 9.64 4.87 7.23 8.74 9.12 5.08 3.41 6.05 5.75 7.89 7.00 8.73 4.94 4.03 7.44 7.81
## [18] 4.47 2.30 8.64 8.72 7.13 8.54 5.15 4.99 0.45 1.50 7.56 5.18 5.43
## Em que intervalo está cada nota? Intervalos fechados à esquerda:
## [a,b).
i <- findInterval(notas, c(0,4,7,10))
head(cbind(notas, i))
## notas i
## [1,] 4.20 2
## [2,] 9.64 3
## [3,] 4.87 2
## [4,] 7.23 3
## [5,] 8.74 3
## [6,] 9.12 3
## A cut() faz a mesma coisa, mas converte para fator e atribui rótulos.
cut(c(notas, 0), c(0,4,7,10))
## [1] (4,7] (7,10] (4,7] (7,10] (7,10] (7,10] (4,7] (0,4] (4,7] (4,7] (7,10] (4,7]
## [13] (7,10] (4,7] (4,7] (7,10] (7,10] (4,7] (0,4] (7,10] (7,10] (7,10] (7,10] (4,7]
## [25] (4,7] (0,4] (0,4] (7,10] (4,7] (4,7] <NA>
## Levels: (0,4] (4,7] (7,10]
cut(c(notas, 0), c(0,4,7,10), include.lowest=TRUE)
## [1] (4,7] (7,10] (4,7] (7,10] (7,10] (7,10] (4,7] [0,4] (4,7] (4,7] (7,10] (4,7]
## [13] (7,10] (4,7] (4,7] (7,10] (7,10] (4,7] [0,4] (7,10] (7,10] (7,10] (7,10] (4,7]
## [25] (4,7] [0,4] [0,4] (7,10] (4,7] (4,7] [0,4]
## Levels: [0,4] (4,7] (7,10]
cut(c(notas, 0), c(0,4,7,10), include.lowest=TRUE, right=FALSE)
## [1] [4,7) [7,10] [4,7) [7,10] [7,10] [7,10] [4,7) [0,4) [4,7) [4,7) [7,10] [7,10]
## [13] [7,10] [4,7) [4,7) [7,10] [7,10] [4,7) [0,4) [7,10] [7,10] [7,10] [7,10] [4,7)
## [25] [4,7) [0,4) [0,4) [7,10] [4,7) [4,7) [0,4)
## Levels: [0,4) [4,7) [7,10]
## Mudando os rótulos para não usar os automáticos.
x <- cut(c(notas, 0), c(0,4,7,10), include.lowest=TRUE, right=FALSE,
labels=c("Rep","Ex","Ap"))
tb <- table(x)
tb
## x
## Rep Ex Ap
## 5 12 14
layout(matrix(c(1,1,2), ncol=3))
pie(tb)
barplot(tb)
layout(1)
##-----------------------------------------------------------------------------
## Matrizes são arranjos regulares (retangulares) de duas dimensões
## (linhas e colunas) no entanto arranjos de mais dimensões existem. Com
## 3 dimensões tem-se o equivalente à "cubos" (na realidade o termo
## apropriado é prisma retangular, o cubo é aquele com o mesmo
## comprimento em todas as dimensões). Se referem às 3 dimensões como
## linha, coluna e face/camada/lâmina/página.
## Criando um arranjo de 3 dimensões 3x3x2.
a <- array(1:18, dim=c(3,3,2))
str(a)
## int [1:3, 1:3, 1:2] 1 2 3 4 5 6 7 8 9 10 ...
a
## , , 1
##
## [,1] [,2] [,3]
## [1,] 1 4 7
## [2,] 2 5 8
## [3,] 3 6 9
##
## , , 2
##
## [,1] [,2] [,3]
## [1,] 10 13 16
## [2,] 11 14 17
## [3,] 12 15 18
##-----------------------------------------------------------------------------
## Muitos dados são representados dessa forma. Assim tem-se mais
## facilidade em selecionar de acordo com um nível (dimensão) e aplicar
## medidas descritivas (como somas, médias).
## Dados sobre o acidente com o Titanic.
str(Titanic)
## table [1:4, 1:2, 1:2, 1:2] 0 0 35 0 0 0 17 0 118 154 ...
## - attr(*, "dimnames")=List of 4
## ..$ Class : chr [1:4] "1st" "2nd" "3rd" "Crew"
## ..$ Sex : chr [1:2] "Male" "Female"
## ..$ Age : chr [1:2] "Child" "Adult"
## ..$ Survived: chr [1:2] "No" "Yes"
class(Titanic)
## [1] "table"
is.array(Titanic)
## [1] TRUE
Titanic
## , , Age = Child, Survived = No
##
## Sex
## Class Male Female
## 1st 0 0
## 2nd 0 0
## 3rd 35 17
## Crew 0 0
##
## , , Age = Adult, Survived = No
##
## Sex
## Class Male Female
## 1st 118 4
## 2nd 154 13
## 3rd 387 89
## Crew 670 3
##
## , , Age = Child, Survived = Yes
##
## Sex
## Class Male Female
## 1st 5 1
## 2nd 11 13
## 3rd 13 14
## Crew 0 0
##
## , , Age = Adult, Survived = Yes
##
## Sex
## Class Male Female
## 1st 57 140
## 2nd 14 80
## 3rd 75 76
## Crew 192 20
##-----------------------------------------------------------------------------
## A seleção segue a mesma lógica das matrizes com a novidade de existem
## mais dimensões.
dimnames(Titanic)
## $Class
## [1] "1st" "2nd" "3rd" "Crew"
##
## $Sex
## [1] "Male" "Female"
##
## $Age
## [1] "Child" "Adult"
##
## $Survived
## [1] "No" "Yes"
## Só os sobreviventes.
Titanic[ , , ,2]
## , , Age = Child
##
## Sex
## Class Male Female
## 1st 5 1
## 2nd 11 13
## 3rd 13 14
## Crew 0 0
##
## , , Age = Adult
##
## Sex
## Class Male Female
## 1st 57 140
## 2nd 14 80
## 3rd 75 76
## Crew 192 20
## Sobreviventes mulheres.
Titanic[ ,2, ,2]
## Age
## Class Child Adult
## 1st 1 140
## 2nd 13 80
## 3rd 14 76
## Crew 0 20
## Sobreviventes mulheres da primeira e segunda classes.
Titanic[1:2,2, ,2]
## Age
## Class Child Adult
## 1st 1 140
## 2nd 13 80
## Sobreviventes mulheres da primeira e segunda classes adultas.
Titanic[1:2,2,2,2]
## 1st 2nd
## 140 80
## Quantos sobreviventes?
sum(Titanic[ , , ,2])
## [1] 711
## Quantas mulheres à bordo?
sum(Titanic[ ,2, ,])
## [1] 470
## Quantas crianças à bordo?
sum(Titanic[,,1,])
## [1] 109
## Classificação de indivíduos de uma amostra de acordo com sexo, cor
## dos olhos e dos cabelos.
str(HairEyeColor)
## table [1:4, 1:4, 1:2] 32 53 10 3 11 50 10 30 10 25 ...
## - attr(*, "dimnames")=List of 3
## ..$ Hair: chr [1:4] "Black" "Brown" "Red" "Blond"
## ..$ Eye : chr [1:4] "Brown" "Blue" "Hazel" "Green"
## ..$ Sex : chr [1:2] "Male" "Female"
class(HairEyeColor)
## [1] "table"
is.array(HairEyeColor)
## [1] TRUE
HairEyeColor
## , , Sex = Male
##
## Eye
## Hair Brown Blue Hazel Green
## Black 32 11 10 3
## Brown 53 50 25 15
## Red 10 10 7 7
## Blond 3 30 5 8
##
## , , Sex = Female
##
## Eye
## Hair Brown Blue Hazel Green
## Black 36 9 5 2
## Brown 66 34 29 14
## Red 16 7 7 7
## Blond 4 64 5 8
dimnames(HairEyeColor)
## $Hair
## [1] "Black" "Brown" "Red" "Blond"
##
## $Eye
## [1] "Brown" "Blue" "Hazel" "Green"
##
## $Sex
## [1] "Male" "Female"
## Quantas mulheres?
sum(HairEyeColor[,,2])
## [1] 313
## Quantas mulheres morenas?
sum(HairEyeColor[1,,2])
## [1] 52
## Quantas mulheres dos olhos claros (verde/azul)?
sum(HairEyeColor[,c(2,4),2])
## [1] 145
##-----------------------------------------------------------------------------
## Tabelas cruzadas de frequência quase sempre são matrizes/arranjos.
## Carrega dados do pacote ggplo2. Caso não tenha esse pacote, instale
## com install.packages("ggplot2")
data(diamonds, package="ggplot2")
d <- diamonds
str(d)
## 'data.frame': 53940 obs. of 10 variables:
## $ carat : num 0.23 0.21 0.23 0.29 0.31 0.24 0.24 0.26 0.22 0.23 ...
## $ cut : Ord.factor w/ 5 levels "Fair"<"Good"<..: 5 4 2 4 2 3 3 3 1 3 ...
## $ color : Ord.factor w/ 7 levels "D"<"E"<"F"<"G"<..: 2 2 2 6 7 7 6 5 2 5 ...
## $ clarity: Ord.factor w/ 8 levels "I1"<"SI2"<"SI1"<..: 2 3 5 4 2 6 7 3 4 5 ...
## $ depth : num 61.5 59.8 56.9 62.4 63.3 62.8 62.3 61.9 65.1 59.4 ...
## $ table : num 55 61 65 58 58 57 57 55 61 61 ...
## $ price : int 326 326 327 334 335 336 336 337 337 338 ...
## $ x : num 3.95 3.89 4.05 4.2 4.34 3.94 3.95 4.07 3.87 4 ...
## $ y : num 3.98 3.84 4.07 4.23 4.35 3.96 3.98 4.11 3.78 4.05 ...
## $ z : num 2.43 2.31 2.31 2.63 2.75 2.48 2.47 2.53 2.49 2.39 ...
## Esse data.frame é enorme, então não peça para vê-lo.
## Tabela de frequência para classficação quanto à cor.
tb <- table(d$color)
class(tb)
## [1] "table"
c(is.vector(tb), is.matrix(tb), is.array(tb))
## [1] FALSE FALSE TRUE
str(tb)
## 'table' int [1:7(1d)] 6775 9797 9542 11292 8304 5422 2808
## - attr(*, "dimnames")=List of 1
## ..$ : chr [1:7] "D" "E" "F" "G" ...
tb
##
## D E F G H I J
## 6775 9797 9542 11292 8304 5422 2808
## Frequância cruzada de cor com corte.
tb <- table(d$color, d$cut)
tb <- with(d, table(color, cut))
class(tb)
## [1] "table"
c(is.vector(tb), is.matrix(tb), is.array(tb))
## [1] FALSE TRUE TRUE
str(tb)
## 'table' int [1:7, 1:5] 163 224 312 314 303 175 119 662 933 909 ...
## - attr(*, "dimnames")=List of 2
## ..$ color: chr [1:7] "D" "E" "F" "G" ...
## ..$ cut : chr [1:5] "Fair" "Good" "Very Good" "Premium" ...
tb
## cut
## color Fair Good Very Good Premium Ideal
## D 163 662 1513 1603 2834
## E 224 933 2400 2337 3903
## F 312 909 2164 2331 3826
## G 314 871 2299 2924 4884
## H 303 702 1824 2360 3115
## I 175 522 1204 1428 2093
## J 119 307 678 808 896
## xtabs() e table() fazem a mesma coisa, mas table() precisa dos nomes
## das colunas ou vetores e xtabs precisa de uma fórmula.
tb <- xtabs(~color+cut, data=d)
class(tb)
## [1] "xtabs" "table"
c(is.vector(tb), is.matrix(tb), is.array(tb))
## [1] FALSE TRUE TRUE
str(tb)
## xtabs [1:7, 1:5] 163 224 312 314 303 175 119 662 933 909 ...
## - attr(*, "dimnames")=List of 2
## ..$ color: chr [1:7] "D" "E" "F" "G" ...
## ..$ cut : chr [1:5] "Fair" "Good" "Very Good" "Premium" ...
## - attr(*, "class")= chr [1:2] "xtabs" "table"
## - attr(*, "call")= language xtabs(formula = ~color + cut, data = d)
tb
## cut
## color Fair Good Very Good Premium Ideal
## D 163 662 1513 1603 2834
## E 224 933 2400 2337 3903
## F 312 909 2164 2331 3826
## G 314 871 2299 2924 4884
## H 303 702 1824 2360 3115
## I 175 522 1204 1428 2093
## J 119 307 678 808 896
tb <- xtabs(~color+clarity+cut, data=d)
class(tb)
## [1] "xtabs" "table"
c(is.vector(tb), is.matrix(tb), is.array(tb))
## [1] FALSE FALSE TRUE
str(tb)
## xtabs [1:7, 1:8, 1:5] 4 9 35 53 52 34 23 56 78 89 ...
## - attr(*, "dimnames")=List of 3
## ..$ color : chr [1:7] "D" "E" "F" "G" ...
## ..$ clarity: chr [1:8] "I1" "SI2" "SI1" "VS2" ...
## ..$ cut : chr [1:5] "Fair" "Good" "Very Good" "Premium" ...
## - attr(*, "class")= chr [1:2] "xtabs" "table"
## - attr(*, "call")= language xtabs(formula = ~color + clarity + cut, data = d)
dimnames(tb)
## $color
## [1] "D" "E" "F" "G" "H" "I" "J"
##
## $clarity
## [1] "I1" "SI2" "SI1" "VS2" "VS1" "VVS2" "VVS1" "IF"
##
## $cut
## [1] "Fair" "Good" "Very Good" "Premium" "Ideal"
tb
## , , cut = Fair
##
## clarity
## color I1 SI2 SI1 VS2 VS1 VVS2 VVS1 IF
## D 4 56 58 25 5 9 3 3
## E 9 78 65 42 14 13 3 0
## F 35 89 83 53 33 10 5 4
## G 53 80 69 45 45 17 3 2
## H 52 91 75 41 32 11 1 0
## I 34 45 30 32 25 8 1 0
## J 23 27 28 23 16 1 1 0
##
## , , cut = Good
##
## clarity
## color I1 SI2 SI1 VS2 VS1 VVS2 VVS1 IF
## D 8 223 237 104 43 25 13 9
## E 23 202 355 160 89 52 43 9
## F 19 201 273 184 132 50 35 15
## G 19 163 207 192 152 75 41 22
## H 14 158 235 138 77 45 31 4
## I 9 81 165 110 103 26 22 6
## J 4 53 88 90 52 13 1 6
##
## , , cut = Very Good
##
## clarity
## color I1 SI2 SI1 VS2 VS1 VVS2 VVS1 IF
## D 5 314 494 309 175 141 52 23
## E 22 445 626 503 293 298 170 43
## F 13 343 559 466 293 249 174 67
## G 16 327 474 479 432 302 190 79
## H 12 343 547 376 257 145 115 29
## I 8 200 358 274 205 71 69 19
## J 8 128 182 184 120 29 19 8
##
## , , cut = Premium
##
## clarity
## color I1 SI2 SI1 VS2 VS1 VVS2 VVS1 IF
## D 12 421 556 339 131 94 40 10
## E 30 519 614 629 292 121 105 27
## F 34 523 608 619 290 146 80 31
## G 46 492 566 721 566 275 171 87
## H 46 521 655 532 336 118 112 40
## I 24 312 367 315 221 82 84 23
## J 13 161 209 202 153 34 24 12
##
## , , cut = Ideal
##
## clarity
## color I1 SI2 SI1 VS2 VS1 VVS2 VVS1 IF
## D 13 356 738 920 351 284 144 28
## E 18 469 766 1136 593 507 335 79
## F 42 453 608 879 616 520 440 268
## G 16 486 660 910 953 774 594 491
## H 38 450 763 556 467 289 326 226
## I 17 274 504 438 408 178 179 95
## J 2 110 243 232 201 54 29 25
##-----------------------------------------------------------------------------
## Se o vetor é o objeto de armazenamento de dados mais básico e simples
## a lista é o objeto mais complexo. Uma lista comtém um conjunto de
## itens e cada item da lista pode conter um objeto cujo conteúdo e
## forma são completamente independentes dos demais itens da lista. Uam
## lista é então uma coleção. Sua importância é indiscutível uma vez que
## todos os resultados de métodos estatísticos no R são retornados em
## forma de lista.
## O resultado de fazer um histograma é uma lista.
h <- hist(iris$Sepal.Width)
str(h)
## List of 6
## $ breaks : num [1:13] 2 2.2 2.4 2.6 2.8 3 3.2 3.4 3.6 3.8 ...
## $ counts : int [1:12] 4 7 13 23 36 24 18 10 9 3 ...
## $ density : num [1:12] 0.133 0.233 0.433 0.767 1.2 ...
## $ mids : num [1:12] 2.1 2.3 2.5 2.7 2.9 3.1 3.3 3.5 3.7 3.9 ...
## $ xname : chr "iris$Sepal.Width"
## $ equidist: logi TRUE
## - attr(*, "class")= chr "histogram"
is.list(h)
## [1] TRUE
length(h) ## Número de itens.
## [1] 6
names(h) ## Nomes dos itens.
## [1] "breaks" "counts" "density" "mids" "xname" "equidist"
##-----------------------------------------------------------------------------
## Como criar listas? Com a função list(), e os elementos são separados
## por virgula.
lista <- list(item1=gl(2,4),
item2=matrix(1:3, 3, 3),
item3=runif(10),
item4=head(iris),
item5=c("Leonardo","Raphael","Donatello","Michelangelo"))
lista
## $item1
## [1] 1 1 1 1 2 2 2 2
## Levels: 1 2
##
## $item2
## [,1] [,2] [,3]
## [1,] 1 1 1
## [2,] 2 2 2
## [3,] 3 3 3
##
## $item3
## [1] 0.55241 0.77330 0.07379 0.48768 0.10023 0.09216 0.51644 0.05833 0.94286 0.37119
##
## $item4
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3.0 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
## 4 4.6 3.1 1.5 0.2 setosa
## 5 5.0 3.6 1.4 0.2 setosa
## 6 5.4 3.9 1.7 0.4 setosa
##
## $item5
## [1] "Leonardo" "Raphael" "Donatello" "Michelangelo"
str(lista)
## List of 5
## $ item1: Factor w/ 2 levels "1","2": 1 1 1 1 2 2 2 2
## $ item2: int [1:3, 1:3] 1 2 3 1 2 3 1 2 3
## $ item3: num [1:10] 0.5524 0.7733 0.0738 0.4877 0.1002 ...
## $ item4:'data.frame': 6 obs. of 5 variables:
## ..$ Sepal.Length: num [1:6] 5.1 4.9 4.7 4.6 5 5.4
## ..$ Sepal.Width : num [1:6] 3.5 3 3.2 3.1 3.6 3.9
## ..$ Petal.Length: num [1:6] 1.4 1.4 1.3 1.5 1.4 1.7
## ..$ Petal.Width : num [1:6] 0.2 0.2 0.2 0.2 0.2 0.4
## ..$ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1
## $ item5: chr [1:4] "Leonardo" "Raphael" "Donatello" "Michelangelo"
##-----------------------------------------------------------------------------
## Como acessar listas? Com os operadores: $, [] e [[]].
## $: lista$item1, lista$item2; Seleciona um item de cada vez pelo seu
## nome. O resultado é da classe o objeto dentro do item, ou seja, um
## vetor, matriz, data.frame, etc.
h$mids
## [1] 2.1 2.3 2.5 2.7 2.9 3.1 3.3 3.5 3.7 3.9 4.1 4.3
str(h$mids)
## num [1:12] 2.1 2.3 2.5 2.7 2.9 3.1 3.3 3.5 3.7 3.9 ...
## []: lista["item1"], lista[1], lista[c(1,5)], lista[-2],
## lista[c("item1","item5")]. Seleciona um ou mais elementos, pelo
## índice, nome, regra lógica. Permite deleção com o sinal de
## negativo. O resultado é sempre uma lista, até mesmo quanto a seleção
## é de um item apenas.
h["mids"]
## $mids
## [1] 2.1 2.3 2.5 2.7 2.9 3.1 3.3 3.5 3.7 3.9 4.1 4.3
str(h["mids"])
## List of 1
## $ mids: num [1:12] 2.1 2.3 2.5 2.7 2.9 3.1 3.3 3.5 3.7 3.9 ...
## [[]]: lista[["item"]], lista[[1]]. Equivalente ao uso do $ pois
## seleciona apenas um item e o resultado é da classe do item, no
## entando, pode-se usar os índices, o que é útil quando a matriz não
## contém nome para os índices.
h[["mids"]]
## [1] 2.1 2.3 2.5 2.7 2.9 3.1 3.3 3.5 3.7 3.9 4.1 4.3
str(h[[4]])
## num [1:12] 2.1 2.3 2.5 2.7 2.9 3.1 3.3 3.5 3.7 3.9 ...
str(h[["mids"]])
## num [1:12] 2.1 2.3 2.5 2.7 2.9 3.1 3.3 3.5 3.7 3.9 ...
##-----------------------------------------------------------------------------
## Sabendo consultar uma matriz é possível, por exemplo, fazer anotações
## nos gráficos e adicionar geometria (linhas, pontos, etc.).
## Qual a maior frequência?
mf <- max(h$counts); mf
## [1] 36
## Qual a classe de maior frequência?
wm <- which.max(h$counts); wm
## [1] 5
cf <- h$mids[wm]
plot(h, ylim=c(0, 1.2*mf))
abline(v=cf, col="red")
text(x=cf, y=mf, label=mf)
## Destacando a classe modal com cor.
col <- rep("grey90", length(h$mids))
col[wm] <- "seagreen"
plot(h, ylim=c(0, 1.2*mf), col=col)
text(x=cf, y=mf, label=mf, pos=3)