Curso de estatística experimental com aplicações em R |
|
12 à 14 de Novembro de 2014 - Manaus - AM |
Prof. Dr. Walmes M. Zeviani |
Embrapa Amazônia Ocidental |
Lab. de Estatística e Geoinformação - LEG |
Departamento de Estatística - UFPR |
sudo apt-get install emacs ess
.Abra o R instalado em seu sistema para iniciar uma sessão.
## Texto após o sinal de hash não é interpretado, serve de comentário.
2+6+5+9+3+2 ## Comentário pode ser após alguma instrução.
## Uma intrução pode ser dividida em duas linhas.
2+6+5+
9+3+2
## E em uma linha podem existir mais de uma instrução.
2+6; 14+12; 40-23
Em um curso introdutório aborda-se os 4 tipos básicos de objetos para armazenamento de dados no R: vetores, arranjos, tabelas (data.frames) e listas. Em resumo, distinguem-se tais objetos pela forma na qual armazenam dados.
Nos objetos é importante conhecer formas de selecionar os valores dentro do objeto. Além disso, conhecer os atributos e saber modificá-los é interessante principalmente porque gráficos e procedimentos sobre tais objetos dependem dos seus atributos propriedades. As formas de selecionar elementos de um objeto são com os operadores:
[]
, [ , ]
, [ , , ]
: para vetores e arranjos. As virgulas servem para especificar à dimensão que recebe seleção. Serve para selecionar listas e data frames também.$
: para listas e data frames (pois DF é um caso de lista).[[]]
: serve para listas.@
: serve para listas de objetos classe S4.A seleção de elementos/linhas/colunas/itens nos objetos pode ser de 4 formas:
TRUE
vão selecionar os elementos correspondentes.Abaixo são ilustrados os 4 tipos básicos, atributos e seleção.
##-----------------------------------------------------------------------------
## Vetor.
x <- 100:105
## Atributos.
class(x)
## [1] "integer"
mode(x)
## [1] "numeric"
typeof(x)
## [1] "integer"
length(x)
## [1] 6
str(x)
## int [1:6] 100 101 102 103 104 105
attributes(x)
## NULL
dput(x)
## 100:105
is.vector(x)
## [1] TRUE
is.numeric(x)
## [1] TRUE
is.integer(x)
## [1] TRUE
x[3:5]
## [1] 102 103 104
x[-2]
## [1] 100 102 103 104 105
x[c(2,3)]
## [1] 101 102
##-----------------------------------------------------------------------------
## Vetor nomeado.
x <- c(Paulo=7.8, Ulisses=9.0, Ricardo=8.5, Lincon=4.5, Thobias=7.1)
## Atributos.
class(x)
## [1] "numeric"
mode(x)
## [1] "numeric"
typeof(x)
## [1] "double"
length(x)
## [1] 5
str(x)
## Named num [1:5] 7.8 9 8.5 4.5 7.1
## - attr(*, "names")= chr [1:5] "Paulo" "Ulisses" "Ricardo" "Lincon" ...
attributes(x)
## $names
## [1] "Paulo" "Ulisses" "Ricardo" "Lincon" "Thobias"
dput(x)
## structure(c(7.8, 9, 8.5, 4.5, 7.1), .Names = c("Paulo", "Ulisses",
## "Ricardo", "Lincon", "Thobias"))
is.vector(x)
## [1] TRUE
is.numeric(x)
## [1] TRUE
is.integer(x)
## [1] FALSE
x[3:5]
## Ricardo Lincon Thobias
## 8.5 4.5 7.1
x[-2]
## Paulo Ricardo Lincon Thobias
## 7.8 8.5 4.5 7.1
x[c(2,3)]
## Ulisses Ricardo
## 9.0 8.5
x["Ulisses"]
## Ulisses
## 9
x[c("Ricardo","Thobias")]
## Ricardo Thobias
## 8.5 7.1
##-----------------------------------------------------------------------------
## Um arranjo de duas dimensões.
X <- matrix(1:9, nrow=3, ncol=3)
class(X)
## [1] "matrix"
mode(X)
## [1] "numeric"
typeof(X)
## [1] "integer"
dim(X) ## ncol(X) e nrow(X).
## [1] 3 3
str(X)
## int [1:3, 1:3] 1 2 3 4 5 6 7 8 9
attributes(X)
## $dim
## [1] 3 3
dput(X)
## structure(1:9, .Dim = c(3L, 3L))
is.matrix(X)
## [1] TRUE
is.array(X)
## [1] TRUE
is.numeric(X)
## [1] TRUE
is.integer(X)
## [1] TRUE
X[1,]
## [1] 1 4 7
X[1:2,]
## [,1] [,2] [,3]
## [1,] 1 4 7
## [2,] 2 5 8
X[-2,]
## [,1] [,2] [,3]
## [1,] 1 4 7
## [2,] 3 6 9
X[,-2]
## [,1] [,2]
## [1,] 1 7
## [2,] 2 8
## [3,] 3 9
X[,c(3,2,1)]
## [,1] [,2] [,3]
## [1,] 7 4 1
## [2,] 8 5 2
## [3,] 9 6 3
X[3:1,c(3,2,1)]
## [,1] [,2] [,3]
## [1,] 9 6 3
## [2,] 8 5 2
## [3,] 7 4 1
##-----------------------------------------------------------------------------
## Um arranjo de 3 dimensões (cúbico).
X <- array(1:24, dim=c(3,4,2))
class(X)
## [1] "array"
mode(X)
## [1] "numeric"
typeof(X)
## [1] "integer"
dim(X) ## ncol(X) e nrow(X).
## [1] 3 4 2
str(X)
## int [1:3, 1:4, 1:2] 1 2 3 4 5 6 7 8 9 10 ...
attributes(X)
## $dim
## [1] 3 4 2
dput(X)
## structure(1:24, .Dim = c(3L, 4L, 2L))
is.matrix(X)
## [1] FALSE
is.array(X)
## [1] TRUE
is.numeric(X)
## [1] TRUE
is.integer(X)
## [1] TRUE
X
## , , 1
##
## [,1] [,2] [,3] [,4]
## [1,] 1 4 7 10
## [2,] 2 5 8 11
## [3,] 3 6 9 12
##
## , , 2
##
## [,1] [,2] [,3] [,4]
## [1,] 13 16 19 22
## [2,] 14 17 20 23
## [3,] 15 18 21 24
X[1,,]
## [,1] [,2]
## [1,] 1 13
## [2,] 4 16
## [3,] 7 19
## [4,] 10 22
X[,1,]
## [,1] [,2]
## [1,] 1 13
## [2,] 2 14
## [3,] 3 15
X[,,1]
## [,1] [,2] [,3] [,4]
## [1,] 1 4 7 10
## [2,] 2 5 8 11
## [3,] 3 6 9 12
##-----------------------------------------------------------------------------
## Um data frame.
da <- data.frame(id=1:5,
aluno=c("Júlio", "Ana", "Pietra", "Bianca", "Nelson"),
nota=c(9,8.5,7.1,9.8,8),
falta=c(12,4,4,0,2))
class(da)
## [1] "data.frame"
mode(da)
## [1] "list"
typeof(da)
## [1] "list"
dim(da) ## ncol(da) e nrow(da).
## [1] 5 4
str(da)
## 'data.frame': 5 obs. of 4 variables:
## $ id : int 1 2 3 4 5
## $ aluno: Factor w/ 5 levels "Ana","Bianca",..: 3 1 5 2 4
## $ nota : num 9 8.5 7.1 9.8 8
## $ falta: num 12 4 4 0 2
attributes(da)
## $names
## [1] "id" "aluno" "nota" "falta"
##
## $row.names
## [1] 1 2 3 4 5
##
## $class
## [1] "data.frame"
dput(da)
## structure(list(id = 1:5, aluno = structure(c(3L, 1L, 5L, 2L,
## 4L), .Label = c("Ana", "Bianca", "Júlio", "Nelson", "Pietra"
## ), class = "factor"), nota = c(9, 8.5, 7.1, 9.8, 8), falta = c(12,
## 4, 4, 0, 2)), .Names = c("id", "aluno", "nota", "falta"), row.names = c(NA,
## -5L), class = "data.frame")
is.data.frame(da)
## [1] TRUE
is.list(da)
## [1] TRUE
da[1,]
## id aluno nota falta
## 1 1 Júlio 9 12
da[,2]
## [1] Júlio Ana Pietra Bianca Nelson
## Levels: Ana Bianca Júlio Nelson Pietra
da[,"aluno"]
## [1] Júlio Ana Pietra Bianca Nelson
## Levels: Ana Bianca Júlio Nelson Pietra
da[,c("nota", "falta")]
## nota falta
## 1 9.0 12
## 2 8.5 4
## 3 7.1 4
## 4 9.8 0
## 5 8.0 2
da[1:3, c("nota", "falta")]
## nota falta
## 1 9.0 12
## 2 8.5 4
## 3 7.1 4
##-----------------------------------------------------------------------------
## Uma lista.
L <- list(item1=x,
item2=X,
item3=da)
class(L)
## [1] "list"
mode(L)
## [1] "list"
typeof(L)
## [1] "list"
length(L)
## [1] 3
str(L)
## List of 3
## $ item1: Named num [1:5] 7.8 9 8.5 4.5 7.1
## ..- attr(*, "names")= chr [1:5] "Paulo" "Ulisses" "Ricardo" "Lincon" ...
## $ item2: int [1:3, 1:4, 1:2] 1 2 3 4 5 6 7 8 9 10 ...
## $ item3:'data.frame': 5 obs. of 4 variables:
## ..$ id : int [1:5] 1 2 3 4 5
## ..$ aluno: Factor w/ 5 levels "Ana","Bianca",..: 3 1 5 2 4
## ..$ nota : num [1:5] 9 8.5 7.1 9.8 8
## ..$ falta: num [1:5] 12 4 4 0 2
attributes(L)
## $names
## [1] "item1" "item2" "item3"
dput(L)
## structure(list(item1 = structure(c(7.8, 9, 8.5, 4.5, 7.1), .Names = c("Paulo",
## "Ulisses", "Ricardo", "Lincon", "Thobias")), item2 = structure(1:24, .Dim = c(3L,
## 4L, 2L)), item3 = structure(list(id = 1:5, aluno = structure(c(3L,
## 1L, 5L, 2L, 4L), .Label = c("Ana", "Bianca", "Júlio", "Nelson",
## "Pietra"), class = "factor"), nota = c(9, 8.5, 7.1, 9.8, 8),
## falta = c(12, 4, 4, 0, 2)), .Names = c("id", "aluno", "nota",
## "falta"), row.names = c(NA, -5L), class = "data.frame")), .Names = c("item1",
## "item2", "item3"))
is.data.frame(L)
## [1] FALSE
is.list(L)
## [1] TRUE
L$item1
## Paulo Ulisses Ricardo Lincon Thobias
## 7.8 9.0 8.5 4.5 7.1
L$item3[,"aluno"]
## [1] Júlio Ana Pietra Bianca Nelson
## Levels: Ana Bianca Júlio Nelson Pietra
L[-2]
## $item1
## Paulo Ulisses Ricardo Lincon Thobias
## 7.8 9.0 8.5 4.5 7.1
##
## $item3
## id aluno nota falta
## 1 1 Júlio 9.0 12
## 2 2 Ana 8.5 4
## 3 3 Pietra 7.1 4
## 4 4 Bianca 9.8 0
## 5 5 Nelson 8.0 2
L[["item1"]]
## Paulo Ulisses Ricardo Lincon Thobias
## 7.8 9.0 8.5 4.5 7.1
L[[1]]
## Paulo Ulisses Ricardo Lincon Thobias
## 7.8 9.0 8.5 4.5 7.1
É muito frequênte a necessidade de selecionar elementos de um objeto de acordo com alguma regra lógica. No objeto da
, por exemplo, quais os alunos com mais de 10 faltas? Quantos alunos nota superior à 9?
Para responder à essas perguntam tem-se que utilizar regras lógicas. As regras lógicas podem ser simples ou compostas. Os operadores para regras lógicas são < > <= >= == !=
. Os operadores para fazer regras compostas são o E &
e o OU |
. E o operador %in%
é usado para representar o operador pertence para conjuntos. O resultado de uma regra lógica é um vetor lógico que no caso será usando para seleção. São operadores também úteis o “todos” all()
e “algum” any()
.
## Selecionando as notas maiores que 8.
sel <- da$nota>8; sel
## [1] TRUE TRUE FALSE TRUE FALSE
da[sel,]
## id aluno nota falta
## 1 1 Júlio 9.0 12
## 2 2 Ana 8.5 4
## 4 4 Bianca 9.8 0
## Selecionando as notas maiores que 8 com faltas não superior à 10.
sel <- da$nota>8 & da$falta<=10; sel
## [1] FALSE TRUE FALSE TRUE FALSE
da[sel,]
## id aluno nota falta
## 2 2 Ana 8.5 4
## 4 4 Bianca 9.8 0
## O operador ! inverte um vetor lógico.
!sel
## [1] TRUE FALSE TRUE FALSE TRUE
da[!sel,]
## id aluno nota falta
## 1 1 Júlio 9.0 12
## 3 3 Pietra 7.1 4
## 5 5 Nelson 8.0 2
da$nota>8 & da$falta<=10
## [1] FALSE TRUE FALSE TRUE FALSE
## da$nota>8 && da$falta<=10 ## **verificar!
sel <- da$aluno%in%c("Ana","Bianca")
## sel <- is.element(da$aluno, c("Ana","Bianca"))
da[sel,]
## id aluno nota falta
## 2 2 Ana 8.5 4
## 4 4 Bianca 9.8 0
all(da$nota>7)
## [1] TRUE
any(da$falta<10)
## [1] TRUE
sum(da$nota>8)
## [1] 3
As conversões podem ser de formato ou de tipo de conteúdo. Pode-se precisar converter um data frame em uma matriz para, por exemplo, fazer uma análise de componentes principais bem como converter um vetor de characteres para fator para mudar a ordem ou rótulo de seus níveis. As funções para conversão iniciam com o padrão as.*
.
## As funções para conversão.
apropos("^as\\.")
## [1] "as.array" "as.array.default"
## [3] "as.call" "as.character"
## [5] "as.character.condition" "as.character.Date"
## [7] "as.character.default" "as.character.error"
## [9] "as.character.factor" "as.character.hexmode"
## [11] "as.character.numeric_version" "as.character.octmode"
## [13] "as.character.POSIXt" "as.character.srcref"
## [15] "as.complex" "as.data.frame"
## [17] "as.data.frame.array" "as.data.frame.AsIs"
## [19] "as.data.frame.character" "as.data.frame.complex"
## [21] "as.data.frame.data.frame" "as.data.frame.Date"
## [23] "as.data.frame.default" "as.data.frame.difftime"
## [25] "as.data.frame.factor" "as.data.frame.integer"
## [27] "as.data.frame.list" "as.data.frame.logical"
## [29] "as.data.frame.matrix" "as.data.frame.model.matrix"
## [31] "as.data.frame.numeric" "as.data.frame.numeric_version"
## [33] "as.data.frame.ordered" "as.data.frame.POSIXct"
## [35] "as.data.frame.POSIXlt" "as.data.frame.raw"
## [37] "as.data.frame.table" "as.data.frame.ts"
## [39] "as.data.frame.vector" "as.Date"
## [41] "as.Date.character" "as.Date.date"
## [43] "as.Date.dates" "as.Date.default"
## [45] "as.Date.factor" "as.Date.numeric"
## [47] "as.Date.POSIXct" "as.Date.POSIXlt"
## [49] "as.dendrogram" "as.difftime"
## [51] "as.dist" "as.double"
## [53] "as.double.difftime" "as.double.POSIXlt"
## [55] "as.environment" "as.expression"
## [57] "as.expression.default" "as.factor"
## [59] "as.formula" "as.function"
## [61] "as.function.default" "as.graphicsAnnot"
## [63] "as.hclust" "as.hexmode"
## [65] "as.integer" "as.list"
## [67] "as.list.data.frame" "as.list.Date"
## [69] "as.list.default" "as.list.environment"
## [71] "as.list.factor" "as.list.function"
## [73] "as.list.numeric_version" "as.list.POSIXct"
## [75] "as.logical" "as.logical.factor"
## [77] "as.matrix" "as.matrix.data.frame"
## [79] "as.matrix.default" "as.matrix.noquote"
## [81] "as.matrix.POSIXlt" "as.name"
## [83] "as.null" "as.null.default"
## [85] "as.numeric" "as.numeric_version"
## [87] "as.octmode" "as.ordered"
## [89] "as.package_version" "as.pairlist"
## [91] "as.person" "as.personList"
## [93] "as.POSIXct" "as.POSIXct.date"
## [95] "as.POSIXct.Date" "as.POSIXct.dates"
## [97] "as.POSIXct.default" "as.POSIXct.numeric"
## [99] "as.POSIXct.POSIXlt" "as.POSIXlt"
## [101] "as.POSIXlt.character" "as.POSIXlt.date"
## [103] "as.POSIXlt.Date" "as.POSIXlt.dates"
## [105] "as.POSIXlt.default" "as.POSIXlt.factor"
## [107] "as.POSIXlt.numeric" "as.POSIXlt.POSIXct"
## [109] "as.qr" "as.raster"
## [111] "as.raw" "as.relistable"
## [113] "as.roman" "as.single"
## [115] "as.single.default" "as.stepfun"
## [117] "as.symbol" "as.table"
## [119] "as.table.default" "as.ts"
## [121] "as.vector" "as.vector.factor"
RSiteSearch("qtl")
## A search query has been submitted to http://search.r-project.org
## The results page should open in your browser shortly
## De numérico para inteiro.
x <- seq(from=1, to=12, by=2)
x
## [1] 1 3 5 7 9 11
## c(1,3,4)
## c(1L,3L,4L)
is.integer(x)
## [1] FALSE
object.size(x)
## 72 bytes
dput(x)
## c(1, 3, 5, 7, 9, 11)
x <- as.integer(x)
object.size(x)
## 56 bytes
dput(x)
## c(1L, 3L, 5L, 7L, 9L, 11L)
## De data.frame para lista.
as.list(da)
## $id
## [1] 1 2 3 4 5
##
## $aluno
## [1] Júlio Ana Pietra Bianca Nelson
## Levels: Ana Bianca Júlio Nelson Pietra
##
## $nota
## [1] 9.0 8.5 7.1 9.8 8.0
##
## $falta
## [1] 12 4 4 0 2
## De vetor para matriz.
as.matrix(x)
## [,1]
## [1,] 1
## [2,] 3
## [3,] 5
## [4,] 7
## [5,] 9
## [6,] 11
Dentre os tipos de conversão deve-se destacar a importância daquela que envolve characteres e fatores. Muitos dos métodos de análise de dados, das tabelas de frequência até análise de variância são desenvolvidos para dados do tipo fator.
## Um vetor com 3 níveis.
x <- sample(c("bom","regular","ruim"), size=10, replace=TRUE)
## Atributos.
class(x)
## [1] "character"
mode(x)
## [1] "character"
typeof(x)
## [1] "character"
length(x)
## [1] 10
str(x)
## chr [1:10] "bom" "regular" "bom" "ruim" "bom" "ruim" "ruim" "bom" ...
attributes(x)
## NULL
dput(x)
## c("bom", "regular", "bom", "ruim", "bom", "ruim", "ruim", "bom",
## "ruim", "bom")
is.vector(x)
## [1] TRUE
is.character(x)
## [1] TRUE
is.factor(x)
## [1] FALSE
## Conversão.
x <- as.factor(x)
## Atributos.
class(x)
## [1] "factor"
mode(x)
## [1] "numeric"
typeof(x)
## [1] "integer"
length(x)
## [1] 10
str(x)
## Factor w/ 3 levels "bom","regular",..: 1 2 1 3 1 3 3 1 3 1
attributes(x)
## $levels
## [1] "bom" "regular" "ruim"
##
## $class
## [1] "factor"
dput(x)
## structure(c(1L, 2L, 1L, 3L, 1L, 3L, 3L, 1L, 3L, 1L), .Label = c("bom",
## "regular", "ruim"), class = "factor")
is.vector(x)
## [1] FALSE
is.character(x)
## [1] FALSE
is.factor(x)
## [1] TRUE
levels(x)
## [1] "bom" "regular" "ruim"
nlevels(x)
## [1] 3
Consultar e fornecer as informações da sessão é algo útil para ter conhecimento da versão do R e seus pacotes bem como detalhes do sistema operacional. Dessa forma pode-se verificar se a atual instalação está defasada, por exemplo. Usuários Linux que fazer instalação do R pelo repositório debian estão sempre com a versão mais recente do R.
## Lista os objetos existentes.
ls()
## Remove objetos existentes.
rm(list=c("da", "L"))
## Mostra informações da sessão, versões e pacotes.
sessionInfo()
## Mais informações.
cbind(Sys.info())
## Salva a imagem (objetos criados) para serem carregados no futuro ou
## compartilhados.
save.image("minhaprimeirasessao.RData")
rm(list=ls())
ls()
## Carrega sessão.
load("minhaprimeirasessao.RData")
ls()
## Mostra o diretório de trabalho.
getwd()
## setwd()
## Mostra os arquivos dentro no diretório.
list.files()
Os pacotes oficiais para o R são disponibilizados pelo cran.r-project.org.
## Instala um pacote.
install.packages("plyr", dependencies=TRUE,
repos="http://cran-r.c3sl.ufpr.br/")
## Instala vários.
install.packages(c("plyr", "doBy", "multcomp", "latticeExtra", "devtools"),
dependencies=TRUE,
repos="http://cran-r.c3sl.ufpr.br/")
## Faz requisição do pacote.
require(plyr)
require(multcomp)
Muitos desenvolvedores de pacotes R têm utilizado o GitHub para manter seus projetos e fazer colaboração em código. O pacote knitr e o plyr são exemplos de pacotes R mantidos no GitHub.
## Pacote wzRfun por Walmes Zeviani.
browseURL("https://github.com/walmes/wzRfun")
require(devtools)
install_github("wzRfun", "walmes")
print(sessionInfo(), locale=FALSE)
## R version 3.1.1 (2014-07-10)
## Platform: i686-pc-linux-gnu (32-bit)
##
## attached base packages:
## [1] stats graphics grDevices utils datasets base
##
## other attached packages:
## [1] rmarkdown_0.3.3 knitr_1.7
##
## loaded via a namespace (and not attached):
## [1] digest_0.6.4 evaluate_0.5.5 formatR_1.0 htmltools_0.2.6 stringr_0.6.2
## [6] tools_3.1.1 yaml_2.1.13
Sys.time()
## [1] "2014-11-12 22:02:01 BRST"