Você está na página 1de 69

Curso: Mtodos Computacionais em Estatsica

Lus Carlos
9 de fevereiro de 2016
Mtodos computacionais com o uso do software R
Conhecendo o software R
O software R uma linguagem para manipulao de dados, anlises estatsticas e construo de grficos.
O mesmo derivado do software S, desenvolvido pela AT&T.
Plataformas: Windows, MacOS, Unix e derivados.
O R um software livre, cdigo aberto e um projeto colaborativo.
Software R:
[Baixar e instalar o R:] (https://cran.r-project.org/)
Conhecendo o software RStudio

Software RStudio:
[Baixar e instalar o RStudio:] (https://www.rstudio.com/products/rstudio-desktop/)
O ambiente do RStudio
Instalando e habilitando pacotes no R
Comandos teis
setwd(c:/Users/lsr10/ArqR) muda o diretrio do trabalho
getwd() mostra o diretrio do trabalho
ls() e objects() lista o nome dos objetos criados na sesso atual
dir() lista todos os arquivos na pasta de trabalho atual
search() lista todos os pacotes carregados
rm() remove o objeto entre parnteses
rm(list=ls(all=TRUE)) remove todos os objetos, limpando a memria
attach() reconhece os objetos dentro de um data frame
detach() funo para desfazer a funo attach()
Operaes bsicas com o R
Adio usa o operador +: 2 + 2 = 4
Subtrao usa o operador -: 1-5 = -4
Multiplicaon usa o operador *: 2*6 = 12
Diviso de ponto flutuante usa o operador /: 6/5 = 1.2
1

Diviso inteira usa o operador %/%: 6%/%5 = 1 e e 5%/%2 = 2


Resto da diviso usa o operador %% : 6%%3 = 0 e 5%%2 = 1
Potenciao usa os operadores e **: 23 = 8 ou 2**3 = 8
p
Raz quadrada usa a funo sqrt(): (9), sqrt(9) = 3
Clculo de uma raz qualquer: 27(1/3) = 3
Exponencial usa a funo exp(): exp(2) = 7.3890561
Exponencial de exp(x)-1 usa a funo expm1(): expm1(2) = 6.3890561
Logaritmo na base e usa a funo log(): log(2) = 0.6931472
logaritmo na base 10 usa a funo log10(): log10(5) = 0.69897
logaritmo na base 2 usa a funo log2(): log2(5) = 2.3219281
Logaritmo na base e de x+1 usa a funo log1p(): se x=1, logp1(x) = 0.6931472
Logaritmo em qualquer base usa a funo log(x, base): se x=27, log(x,3)= 3
Clculo de fatorial de um nmero (n>=0), usa a funo factorial(). factorial(5) = 120
Funes trigonomtricas (valores em radianos): sin(), cos(), tan()
Funes trigonomtricas inversas: asin(), acos(), atan()
Funes hiperblicas: sinh(), cosh(), tanh()
Funes hiperblicas inversas: asinh(), acosh(), atanh()
Funo Gamma de Euler: gamma()
Nmero de combinaes: choose():

n!
x!(nx!)

Conjunto gerados pela combinao de determinados nmeros de elementos: combn()


xc=c(a,b,c), combn(xc,2) = a, b, a, c, b, c
Valor absoluto usa a funo abs(): abs(-5) = 5
Valor de usa pi" : 3.1415927
Atribuio de valores no R: " <- ,->,="
x <- 5
y=6
x+y -> z
x; y; z # comandos separados por ;
Em comentrios usar #
z*x # produto de z por x
+ aparecer como prompt de comando indicando a continuao do comando da linha anterior
A opo options(digits = n), 1<=n<=22, define a quantidade de digitos decimal.
Palavras reservadas do R
Nomes de variveis no R pode conter letras, nmeros, . e _, no devendo iniciar com um nmero ou
ponto seguido por um nmero.

x9l=3
.x4=5
#9xc=3
#.9rg=4
#make.names
Nmeros especiais (Inf,-Inf, NaN-not a number, NA-not available)
c(0, Inf, -Inf, NaN, NA)
## [1]

Inf -Inf

NaN

NA

c(Inf+1, Inf-1, Inf-Inf)


## [1] Inf Inf NaN
c(1/Inf, Inf/1, Inf/Inf)
## [1]

0 Inf NaN

c(sqrt(Inf), sin(Inf))
## Warning in sin(Inf): NaNs produzidos
## [1] Inf NaN
c(log(Inf), log(Inf, base=Inf))
## Warning: NaNs produzidos
## [1] Inf NaN
c(1+NA, NaN+NaN, NaN+Inf, NaN+NA)
## [1]

NA NaN NaN NaN

is.finite(c(0, Inf, -Inf, NaN, NA))


## [1]

TRUE FALSE FALSE FALSE FALSE

is.nan(c(0, Inf, -Inf, NaN, NA))


## [1] FALSE FALSE FALSE

TRUE FALSE

is.na(c(0, Inf, -Inf, NaN, NA))


## [1] FALSE FALSE FALSE

TRUE

TRUE

Tipos de dados do R
vetores, matrizes e arrays, data-frames, listas e funes.
Usaremos as funes do tipo is.*() para testar se um objeto de determinado tipo.
is.vector(), is.matrix(), is.array(), is.data.frame(), is.list() e is.function().
Vetores - dados do mesmo tipo (numrico, complexo, lgico, caracter, nulo) - logical, integer, double, complex,
character, or raw
1:10 + 1
##

[1]

9 10 11

1:10 + 1:3
## Warning in 1:10 + 1:3: comprimento do objeto maior no mltiplo do
## comprimento do objeto menor
##

[1]

8 10 12 11

1:10 + 11:20
##

[1] 12 14 16 18 20 22 24 26 28 30

1:5 + 1:10
##

[1]

8 10

9 11 13 15

c(1,2,3,4,5)+c(6,7,8,9,10)
## [1]

9 11 13 15

sum(1:10); mean(1,2,3,4,5)
## [1] 55
## [1] 1
median(1:10)
## [1] 5.5

median(c(1,2,3,4,5))
## [1] 3
Opeadores lgicos (!- not, &- and e |- or)
(vl <- 1:20 >=10)
## [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [12] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE

TRUE

TRUE

!vl
## [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE FALSE
## [12] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
(vl1 <- 1:10 %% 2 == 0)
##

[1] FALSE

TRUE FALSE

TRUE FALSE

TRUE FALSE

TRUE FALSE

TRUE

vl & vl1
## [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [12] TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE

TRUE FALSE

vl | vl1
## [1] FALSE
## [12] TRUE

TRUE FALSE
TRUE TRUE

TRUE FALSE
TRUE TRUE

TRUE FALSE
TRUE TRUE

Classes de nmeros
class(c(FALSE, TRUE))
## [1] "logical"
class(2)
## [1] "numeric"
class(sqrt(5))
## [1] "numeric"
class(2 + 2i)
## [1] "complex"

TRUE FALSE
TRUE TRUE

TRUE

TRUE

class(2L)
## [1] "integer"
class(0.3:1.5)
## [1] "numeric"
class(10:20)
## [1] "integer"
class(c("Abric", "Sapoti", "Ju"))
## [1] "character"
class(factor(c("masc", "fem"))) # fator so inteiros como rtulo, no precisamos usar "0" e "1"
## [1] "factor"
levels(factor(c("masc", "fem")))
## [1] "fem"

"masc"

nlevels(factor(c("masc", "fem")))
## [1] 2
as.integer(factor(c("masc", "fem")))
## [1] 2 1
as.raw(1:20) # vetor de bytes, cada byte representado por 2 digitos hexadecimal(0 a 255).
##

[1] 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 11 12 13 14

as.raw(c(pi, 2+2i, 256)) # a parte imaginria descartada.


## Warning: partes imaginrias descartadas na coero
## Warning: valores fora do limite considerados como 0 na coero para tipo
## raw
## [1] 03 02 00

as.raw(c(pi, 2+2i, 25))


## Warning: partes imaginrias descartadas na coero
## [1] 03 02 19
ct <- "234.256"; as(ct, "numeric"); as.numeric(ct)
## [1] 234.256
## [1] 234.256
# a maioria das funes "is*" tem uma funo correspondente "as*"
ct1=c(5,7,9,11)
# as(ct1, "data.frame"); as.data.frame(ct1) # usar sempre a classe especfica sobre o padro "as".
.Machine
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##

$double.eps
[1] 2.220446e-16
$double.neg.eps
[1] 1.110223e-16
$double.xmin
[1] 2.225074e-308
$double.xmax
[1] 1.797693e+308
$double.base
[1] 2
$double.digits
[1] 53
$double.rounding
[1] 5
$double.guard
[1] 0
$double.ulp.digits
[1] -52
$double.neg.ulp.digits
[1] -53
$double.exponent
[1] 11
$double.min.exp
7

##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##

[1] -1022
$double.max.exp
[1] 1024
$integer.max
[1] 2147483647
$sizeof.long
[1] 4
$sizeof.longlong
[1] 8
$sizeof.longdouble
[1] 16
$sizeof.pointer
[1] 8

xi=vector() # declarao de um vetor


xi; xi[2]=3; xi; xi[1]=5; xi
## logical(0)
## [1] NA

## [1] 5 3
x1 <- c(1,2,3,4,5) # usando a funo c()-combine ou assign("x1", c(1,2,3,4,5))
vector("numeric", 3); numeric(5)
## [1] 0 0 0
## [1] 0 0 0 0 0
vector("complex", 3); complex(5)
## [1] 0+0i 0+0i 0+0i
## [1] 0+0i 0+0i 0+0i 0+0i 0+0i
vector("logical", 3); logical(5)
## [1] FALSE FALSE FALSE
## [1] FALSE FALSE FALSE FALSE FALSE

vector("character", 3); character(5)


## [1] "" "" ""
## [1] "" "" "" "" ""
vector("list",3); vector("raw",3)
##
##
##
##
##
##
##
##

[[1]]
NULL
[[2]]
NULL
[[3]]
NULL

## [1] 00 00 00
xl <- c(TRUE,TRUE,FALSE,FALSE); xl
## [1]

TRUE

TRUE FALSE FALSE

xc <- c("So", "Lus", "Ilha", "do", "Maranho"); xc


## [1] "So"

"Lus"

"Ilha"

"do"

"Maranho"

Os [] so usados para seleo de elementos. As funes rep(), seq() e os : so usados para criar vetores
segundo uma lei de formao.
x3 <- seq(1:20); x3; x3[5]; x3[2:8]
##

[1]

9 10 11 12 13 14 15 16 17 18 19 20

## [1] 5
## [1] 2 3 4 5 6 7 8
x4 <- seq(0,1, by=0.5); x4; is.vector(x4); is.matrix(x4)
## [1] 0.0 0.5 1.0
## [1] TRUE
## [1] FALSE

x5 <- rep(2.5, 10); x5;


##

[1] 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5

x51 <- rep(1:3, 4); x51 # ou rep.int(1:3, 4).


##

[1] 1 2 3 1 2 3 1 2 3 1 2 3

x52 <- rep(1:3, each=2); x52


## [1] 1 1 2 2 3 3
x53 <- rep(1:3, times=1:3); x53
## [1] 1 2 2 3 3 3
x54 <- rep(1:3, length.out=10); x54
##

[1] 1 2 3 1 2 3 1 2 3 1

x55 <- rep_len(1:3, 10); x55


##

# a partir da verso 3.0 de R.

[1] 1 2 3 1 2 3 1 2 3 1

x6 <- rep(c("Fruta po", "Ju", "Bacupar"), c(1,2,3)); x6; x6[3:4] # repetio de um valor.
## [1] "Fruta po" "Ju"
## [1] "Ju"

"Ju"

"Bacupar"

"Bacupar"

"Bacupar"

seq.int(10, 5) # 10:5;
## [1] 10

seq.int(5,15,2)
## [1]

9 11 13 15

n <- 5; 0:n; seq_len(n) #seq_len(), cria uma sequncia de 1 at n


## [1] 0 1 2 3 4 5
## [1] 1 2 3 4 5

10

"Bacupar"

n <- 0; 1:n; seq_len(n)


## [1] 1 0
## integer(0)
for (i in seq_along(x6)) {print(x6[i])}
##
##
##
##
##
##

[1]
[1]
[1]
[1]
[1]
[1]

"Fruta po"
"Ju"
"Ju"
"Bacupar"
"Bacupar"
"Bacupar"

# cria uma sequencia de 1 at o tamanho da entrada


for (i in x6) {print(x6[i])}
##
##
##
##
##
##

[1]
[1]
[1]
[1]
[1]
[1]

NA
NA
NA
NA
NA
NA

(v1 <- 2*sqrt(x1^3))


## [1]

2.000000

5.656854 10.392305 16.000000 22.360680

length(v1); length(1:10); length(c(FALSE, NA, TRUE, NaN, TRUE, FALSE)) #tamanho do vetor
## [1] 5
## [1] 10
## [1] 6
c(Frutapao = 3, Jua = 2, Bacupari = 1) # adiciona nomes aos elementos do vetor com a funo names()
## Frutapao
##
3

Jua Bacupari
2
1

# c(Frutapo = 3, Ju = 2, Bacupar = 1)
nv <- 1:3; names(nv) <- c("Banana", "Goiaba","Melancia"); nv; names(nv); names(v1)
##
##

Banana
1

Goiaba Melancia
2
3
11

## [1] "Banana"

"Goiaba"

"Melancia"

## NULL
Devemos usar == para igualdade de nmeros inteiros, > para maior que, < para menor que, <=
para menor ou igual, >= para maior ou igual e != para diferente.
x3 != 6
## [1]
## [12]

TRUE
TRUE

TRUE
TRUE

TRUE
TRUE

TRUE
TRUE

TRUE FALSE
TRUE TRUE

TRUE
TRUE

TRUE
TRUE

TRUE
TRUE

TRUE

TRUE

## [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [12] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE

TRUE

TRUE

x3 >= 10

x4 == 1
## [1] FALSE FALSE

TRUE

sqrt(2)^2==2
## [1] FALSE
sqrt(2)^2-2
## [1] 4.440892e-16
all.equal(sqrt(2)^2,2) # nivel de tolerncia default=1.5e-8
## [1] TRUE
isTRUE(all.equal(sqrt(2)^2, 3))
## [1] FALSE
Testar se vetor numrico
x1; is.numeric(x1)
## [1] 1 2 3 4 5
## [1] TRUE

12

x1[6] <- "a"; x1; is.numeric(x1)


## [1] "1" "2" "3" "4" "5" "a"
## [1] FALSE
v2 <- rep(1:5, each=5); v2
##

[1] 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 4 4 4 4 4 5 5 5 5 5

v3=c(10,15,20,25,30)
v3; v3[2:5]
## [1] 10 15 20 25 30
## [1] 15 20 25 30
v4=2:10; v4
## [1]

9 10

v41<- array(3:9); v41; is.vector(v41); is.array(v41)


## [1] 3 4 5 6 7 8 9
## [1] FALSE
## [1] TRUE
v5=seq(2,10,0.25); v5
## [1]
## [12]
## [23]

2.00
4.75
7.50

2.25
5.00
7.75

2.50
5.25
8.00

2.75
5.50
8.25

3.00
5.75
8.50

3.25
6.00
8.75

3.50
6.25
9.00

3.75
6.50
9.25

4.00
6.75
9.50

4.25 4.50
7.00 7.25
9.75 10.00

v6=rep(1,30); v6
##

[1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

length(v6) # tamanho do vetor


## [1] 30
Indexao de vetores # usa o []

13

vi <- 1:10*1/2; vi
##

[1] 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0

vi[c(2,5,8,10)]
## [1] 1.0 2.5 4.0 5.0
vi[c(-1, -3, -4, -6, -7, -9)]
## [1] 1.0 2.5 4.0 5.0
vi[c(FALSE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, TRUE, FALSE, TRUE)]
## [1] 1.0 2.5 4.0 5.0
vi[2:6]
## [1] 1.0 1.5 2.0 2.5 3.0
vi[]
##

[1] 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0

which(vi>2)
## [1]

9 10

vi1 <- 1:5


names(vi1) <- c("um", "dois","trs", "quatro","cinco")
vi1[c("dois", "trs")]
## dois trs
##
2
3
vi1[c(3, NA, 5)]
##
##

trs
3

<NA> cinco
NA
5

vi1[c(-3.5, -5.9)]
##
##

um
1

dois quatro
2
4

cinco
5

14

which.min(vi1); which.max(vi1) # atalho para which(min(vi1)) e which(max(vi1))


## um
## 1
## cinco
##
5
Operaes com vetores
v7=c(1,2,3,4,5,6)
va=c(1,1,1,1,1,1)
v8=c(20,21,22,23,24,25,26,27,28,29,30)
v9=c(10,11,12,13,14,15,16)
v10=c(10,10,10,10,10,10,10,10)
v7; va; v8; v9; v10

# vetores com diferentes tamanhos #

## [1] 1 2 3 4 5 6
## [1] 1 1 1 1 1 1
##

[1] 20 21 22 23 24 25 26 27 28 29 30

## [1] 10 11 12 13 14 15 16
## [1] 10 10 10 10 10 10 10 10
Vetores do mesmo tamanho
v7+va

# vetores do mesmo tamanho #

## [1] 2 3 4 5 6 7
v7-va
## [1] 0 1 2 3 4 5
v7*va

# multiplicao indice a indice, nao como em Algebra Linear #

## [1] 1 2 3 4 5 6
Vetores de tamanhos diferentes
v7+v8
## Warning in v7 + v8: comprimento do objeto maior no mltiplo do
## comprimento do objeto menor
##

[1] 21 23 25 27 29 31 27 29 31 33 35

15

v8+v7
## Warning in v8 + v7: comprimento do objeto maior no mltiplo do
## comprimento do objeto menor
##

[1] 21 23 25 27 29 31 27 29 31 33 35

v7*v8
## Warning in v7 * v8: comprimento do objeto maior no mltiplo do
## comprimento do objeto menor
##

[1]

20

42

66

92 120 150

26

54

84 116 150

Produto escalar com o uso de %*%"


v7%*%va

# produto escalar '1*1+2*1+3*1+4*1+5*1+6*1'

##
[,1]
## [1,]
21
#v7%*%v9

# produto escalar incompativel

Outras aplicaes
vidade=c(20:40); vidade
##

[1] 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40

vpeso=c(50:70); vpeso
##

[1] 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70

max(vidade); min(vidade)
## [1] 40
## [1] 20
max(vpeso); min(vpeso)
## [1] 70
## [1] 50

16

vidade[vidade>32]; vpeso[vpeso<65]
## [1] 33 34 35 36 37 38 39 40
##

[1] 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64

Classificao de vetores
sort(vidade)
##

[1] 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40

sort(vpeso)
##

[1] 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70

sort(vidade, decreasing = TRUE)


##

# classificao em ordem decrescente #

[1] 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 20

Mais aplicaes
sum(vidade) # soma dos valores de um vetor #
## [1] 630
sum(vpeso)
## [1] 1260
length(vidade) # tamanho do vetor
## [1] 21
length(vpeso)
## [1] 21
sum(vidade)/length(vidade)

# mdia #

## [1] 30
sum(vpeso)/length(vpeso)
## [1] 60
Algumas funes de estatsitica

17

mean(vidade)
## [1] 30
mean(vpeso)
## [1] 60
# mediana #

median(vidade)
## [1] 30
median(vpeso)
## [1] 60
var(vidade)

# variancia amostral (n-1) #

## [1] 38.5
var(vpeso)
## [1] 38.5
sqrt(var(vidade))

# desvio padro #

## [1] 6.204837
sqrt(var(vpeso))
## [1] 6.204837
sd(vidade)
## [1] 6.204837
sd(vpeso)
## [1] 6.204837
Estatsitcas bsicas
summary(vidade)
##
##

Min. 1st Qu.


20
25

Median
30

Mean 3rd Qu.


30
35

Max.
40

18

summary(vpeso)
##
##

Min. 1st Qu.


50
55

Median
60

Mean 3rd Qu.


60
65

Max.
70

Dados strings

frutas =
c("Abacate","caju","abacate","Laranja","Melancia","Melo","Caju", "Abric","Caju","Melo","Melancia"); f
##
##

[1] "Abacate"
[7] "Caju"

"caju"
"Abric"

"abacate"
"Caju"

"Laranja"
"Melo"

"Melancia" "Melo"
"Melancia"

frutas1 =
c("Abacate",'Caju',"Pitomba","Tangerina","Melancia","Melo",'Caju','Abric',"Caju",'Melo','Melancia');
## [1] "Abacate"
## [6] "Melo"
## [11] "Melancia"

"Caju"
"Caju"

"Pitomba"
"Abric"

"Tangerina" "Melancia"
"Caju"
"Melo"

c("A","B","C","D","E") == "B"
## [1] FALSE

TRUE FALSE FALSE FALSE

c("A","B","C","D","E") < "C"


## [1]

TRUE

TRUE FALSE FALSE FALSE

frutas == "Abacate"
##

[1]

TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE

Tabela de frequencias
table(frutas)
## frutas
## abacate
##
1

Abacate
1

Abric
1

caju
1

Caju
2

Laranja Melancia
1
2

Melo
2

table(frutas1)
## frutas1
##
Abacate
##
1

Abric
1

Caju
3

Melancia
2

Melo
2

19

Pitomba Tangerina
1
1

tabela.frutas1=table(frutas1)
tabela.frutas1
## frutas1
##
Abacate
##
1

Abric
1

Caju
3

Melancia
2

Melo
2

Pitomba Tangerina
1
1

Alguns grficos

60
50

55

vpeso

65

70

plot(vidade, vpeso)

20

25

30
vidade

barplot(tabela.frutas1)

20

35

40

3.0
2.5
2.0
1.5
1.0
0.5
0.0
Abacate

Abric

Caju

Melancia Melo

Pitomba

barplot(tabela.frutas1,
col= c("black", "red", "green", "tomato", "royalblue","royalblue"), main = "Frutas do Maranho")

21

0.0

0.5

1.0

1.5

2.0

2.5

3.0

Frutas do Maranho

Abacate

Abric

Caju

Melancia Melo

pie(tabela.frutas1)

22

Pitomba

Caju
Abric
Abacate

Tangerina

Melancia

Pitomba
Melo

Converso de tipos
as.integer(3.2)
## [1] 3
as.character(3.2)
## [1] "3.2"
as.double(3.2)
## [1] 3.2
as.complex(3.2)
## [1] 3.2+0i
as.logical(3.2)
## [1] TRUE

23

as.raw(3.2)
## [1] 03
Matrizes e Arrays
Array qualquer conjunto de dados retangular multidimensional.
Matriz um Array bidimensional.
Array com trs dimenses
tres_d_array <- array(1:24, dim = c(4,3,2), dimnames = list(c("um","dois","trs","quatro"),
c("one","two","three"),c("un","deux")))
tres_d_array
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##

, , un
um
dois
trs
quatro

one two three


1
5
9
2
6
10
3
7
11
4
8
12

, , deux
um
dois
trs
quatro

one two three


13 17
21
14 18
22
15 19
23
16 20
24

class(tres_d_array)
## [1] "array"
dim(tres_d_array)
## [1] 4 3 2
dimnames(tres_d_array)
##
##
##
##
##
##
##
##

[[1]]
[1] "um"

"dois"

[[2]]
[1] "one"

"two"

[[3]]
[1] "un"

"deux"

"trs"

"quatro"

"three"

24

rownames(tres_d_array)
## [1] "um"

"dois"

"trs"

"quatro"

colnames(tres_d_array)
## [1] "one"

"two"

"three"

Matriz - preenchimento por colunas


m_matrix <- matrix(1:12, nrow = 4, dimnames = list(c("um","dois","trs","quatro"),
c("one","two","three")))
m_matrix
##
##
##
##
##

um
dois
trs
quatro

one two three


1
5
9
2
6
10
3
7
11
4
8
12

str(m_matrix) # mostra a estrutura do objeto


##
##
##
##

int [1:4, 1:3] 1 2 3 4 5 6 7 8 9 10 ...


- attr(*, "dimnames")=List of 2
..$ : chr [1:4] "um" "dois" "trs" "quatro"
..$ : chr [1:3] "one" "two" "three"

class(m_matrix)
## [1] "matrix"
dois_d_matrix <- array(1:12, dim=c(4,3), dimnames = list(c("um","dois","trs","quatro"),
c("one","two","three")))
dois_d_matrix
##
##
##
##
##

um
dois
trs
quatro

one two three


1
5
9
2
6
10
3
7
11
4
8
12

summary(dois_d_matrix) # atua em cada coluna


##
##
##
##
##
##
##

one
Min.
:1.00
1st Qu.:1.75
Median :2.50
Mean
:2.50
3rd Qu.:3.25
Max.
:4.00

two
Min.
:5.00
1st Qu.:5.75
Median :6.50
Mean
:6.50
3rd Qu.:7.25
Max.
:8.00

three
Min.
: 9.00
1st Qu.: 9.75
Median :10.50
Mean
:10.50
3rd Qu.:11.25
Max.
:12.00

25

class(dois_d_matrix)
## [1] "matrix"
dim(dois_d_matrix) # retorna um vetor de inteiros da dimenso da varivel
## [1] 4 3
dimnames(dois_d_matrix)
##
##
##
##
##

[[1]]
[1] "um"
[[2]]
[1] "one"

"dois"
"two"

"trs"

"quatro"

"three"

rownames(dois_d_matrix)
## [1] "um"

"dois"

"trs"

"quatro"

colnames(dois_d_matrix)
## [1] "one"

"two"

"three"

Matriz - preenchimento por linhas


m_matrix <- matrix(1:12, nrow = 4, byrow= TRUE, dimnames = list(c("um","dois","trs","quatro"),
c("one","two","three")))
m_matrix
##
##
##
##
##

um
dois
trs
quatro

one two three


1
2
3
4
5
6
7
8
9
10 11
12

dim(m_matrix)
## [1] 4 3
As funes nrow() e ncol() retornam o nmero de linhas e colunas de uma matriz e primeira e segunda
dimenso de um array - aplicadas sobre vetores retorna NULL.
nrow(m_matrix)
## [1] 4

26

ncol(m_matrix)
## [1] 3
nrow(tres_d_array)
## [1] 4
ncol(tres_d_array)
## [1] 3
dim(tres_d_array)
## [1] 4 3 2
NROW(tres_d_array)
## [1] 4
NCOL(tres_d_array)
## [1] 3
ntv1 <- 0:10; ntv1
##

[1]

9 10

nrow(ntv1)
## NULL
NROW(ntv1)
## [1] 11
ncol(ntv1)
## NULL
NCOL(ntv1)
## [1] 1
A funo length() retorna o produto das dimenses

27

length(m_matrix)
## [1] 12
length(tres_d_array)
## [1] 24
Redimensionamento de Matrizes e Arrays
#dim(m_matrix) <- c(6,2); m_matrix
#dim(tres_d_array) <- c(4,6); tres_d_array
Indexao de arrays
m_matrix[1,1]; m_matrix[,2]
## [1] 1
##
##

um
2

dois
5

trs quatro
8
11

m_matrix[, c("one","two")]
##
##
##
##
##

um
dois
trs
quatro

one two
1
2
4
5
7
8
10 11

m_matrix[-1,3]; m_matrix[1:3,-2]
##
##

dois
6

trs quatro
9
12

##
one three
## um
1
3
## dois
4
6
## trs
7
9
Combinando matrizes
m1_matrix <matrix(seq.int(2,24,2),nrow = 4,
dimnames=list(c("um","dois","trs","quatro"),c("one","two","three")))
m1_matrix

28

##
##
##
##
##

um
dois
trs
quatro

one two three


2 10
18
4 12
20
6 14
22
8 16
24

c(m_matrix, m1_matrix)
## [1] 1
## [24] 24

7 10

8 11

9 12

8 10 12 14 16 18 20 22

cbind(m_matrix, m1_matrix)
##
##
##
##
##

um
dois
trs
quatro

one two three one two three


1
2
3
2 10
18
4
5
6
4 12
20
7
8
9
6 14
22
10 11
12
8 16
24

rbind(m_matrix, m1_matrix)
##
##
##
##
##
##
##
##
##

um
dois
trs
quatro
um
dois
trs
quatro

one two three


1
2
3
4
5
6
7
8
9
10 11
12
2 10
18
4 12
20
6 14
22
8 16
24

Operaes aritmticas com arrays


Os operadores (+, -, /, ) trabalham de elemento em elemento em matrizes e arrays e os mesmos
devem ter conformidade.
m_matrix+m1_matrix
##
##
##
##
##

um
dois
trs
quatro

one two three


3 12
21
8 17
26
13 22
31
18 27
36

m_matrix-m1_matrix
##
##
##
##
##

um
dois
trs
quatro

one two three


-1 -8
-15
0 -7
-14
1 -6
-13
2 -5
-12

29

m_matrix*m1_matrix
##
##
##
##
##

um
dois
trs
quatro

one two three


2 20
54
16 60
120
42 112
198
80 176
288

m_matrix/m1_matrix
##
##
##
##
##

um
dois
trs
quatro

one
0.500000
1.000000
1.166667
1.250000

two
0.2000000
0.4166667
0.5714286
0.6875000

three
0.1666667
0.3000000
0.4090909
0.5000000

m_matrix^2
##
##
##
##
##

one two three


um
1
4
9
dois
16 25
36
trs
49 64
81
quatro 100 121
144

m_matrix^-1
##
##
##
##
##

um
dois
trs
quatro

one
1.0000000
0.2500000
0.1428571
0.1000000

two
0.50000000
0.20000000
0.12500000
0.09090909

three
0.33333333
0.16666667
0.11111111
0.08333333

Outras operaes com matrizes


t(m_matrix) # matriz transposta
##
um dois trs quatro
## one
1
4
7
10
## two
2
5
8
11
## three 3
6
9
12
m_matrix %*% t(m_matrix)
##
##
##
##
##

um
dois
trs
quatro

um dois trs quatro


14
32
50
68
32
77 122
167
50 122 194
266
68 167 266
365

30

# multiplicao de matrizes, nmero de linhas de m_matrix igual ao nmero de colunas t(m_matrix)


#m_matrix %*% m_matrix
1:3 %o% 4:6; outer(1:3, 4:6)
##
[,1] [,2] [,3]
## [1,]
4
5
6
## [2,]
8
10
12
## [3,]
12
15
18
##
[,1] [,2] [,3]
## [1,]
4
5
6
## [2,]
8
10
12
## [3,]
12
15
18
m_matrix %o% m_matrix
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##

, , um, one
um
dois
trs
quatro

one two three


1
2
3
4
5
6
7
8
9
10 11
12

, , dois, one
um
dois
trs
quatro

one two three


4
8
12
16 20
24
28 32
36
40 44
48

, , trs, one
um
dois
trs
quatro

one two three


7 14
21
28 35
42
49 56
63
70 77
84

, , quatro, one
one two three
um
10 20
30
dois
40 50
60
trs
70 80
90
quatro 100 110
120
, , um, two
um

one two three


2
4
6
31

##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##

dois
trs
quatro

8
14
20

10
16
22

12
18
24

, , dois, two
um
dois
trs
quatro

one two three


5 10
15
20 25
30
35 40
45
50 55
60

, , trs, two
um
dois
trs
quatro

one two three


8 16
24
32 40
48
56 64
72
80 88
96

, , quatro, two
one two three
um
11 22
33
dois
44 55
66
trs
77 88
99
quatro 110 121
132
, , um, three
um
dois
trs
quatro

one two three


3
6
9
12 15
18
21 24
27
30 33
36

, , dois, three
um
dois
trs
quatro

one two three


6 12
18
24 30
36
42 48
54
60 66
72

, , trs, three
um
dois
trs
quatro

one two three


9 18
27
36 45
54
63 72
81
90 99
108

, , quatro, three

32

##
##
##
##
##

one two three


um
12 24
36
dois
48 60
72
trs
84 96
108
quatro 120 132
144

m2_matrix <- matrix(c(1,0,1,5,-3,1,2,4,7), nrow=3); m2_matrix


##
[,1] [,2] [,3]
## [1,]
1
5
2
## [2,]
0
-3
4
## [3,]
1
1
7
m2_matrix^-1
##
[,1]
[,2]
[,3]
## [1,]
1 0.2000000 0.5000000
## [2,] Inf -0.3333333 0.2500000
## [3,]
1 1.0000000 0.1428571
solve(m2_matrix) # inverso de matriz
##
[,1] [,2] [,3]
## [1,] -25 -33
26
## [2,]
4
5
-4
## [3,]
3
4
-3
inversa_m2_matrix <- solve(m2_matrix); inversa_m2_matrix
##
[,1] [,2] [,3]
## [1,] -25 -33
26
## [2,]
4
5
-4
## [3,]
3
4
-3
m2_matrix %*% inversa_m2_matrix
##
[,1] [,2] [,3]
## [1,]
1
0
0
## [2,]
0
1
0
## [3,]
0
0
1
Listas e Data Frames
Listas so como vetores onde cada elemnto pode ser de um tipo.
Listas so criadas com a funo list().
l_list <- list(c(1,2,3,4), matrix(1:10, nrow = 5), (seq.int(1,10,2))); l_list

33

##
##
##
##
##
##
##
##
##
##
##
##
##

[[1]]
[1] 1 2 3 4
[[2]]
[,1] [,2]
[1,]
1
6
[2,]
2
7
[3,]
3
8
[4,]
4
9
[5,]
5
10
[[3]]
[1] 1 3 5 7 9

l1_list <##
##
##
##
##
##
##
##
##
##
##
##
##
##

[[1]]
[1] 1

list(c(1,1,2,5,14,42), month.abb, matrix(c(3,-8,1,3), nrow = 2), asin ); l1_list

5 14 42

[[2]]
[1] "Jan" "Feb" "Mar" "Apr" "May" "Jun" "Jul" "Aug" "Sep" "Oct" "Nov"
[12] "Dec"
[[3]]
[,1] [,2]
[1,]
3
1
[2,]
-8
3
[[4]]
function (x)

.Primitive("asin")

str(l_list) # mostra a estrutura do objeto


## List of 3
## $ : num [1:4] 1 2 3 4
## $ : int [1:5, 1:2] 1 2 3 4 5 6 7 8 9 10
## $ : num [1:5] 1 3 5 7 9
summary(l_list)
##
Length
## [1,] 4
## [2,] 10
## [3,] 5

Class
-none-none-none-

Mode
numeric
numeric
numeric

summary(l1_list)
##
##
##
##
##

Length
[1,] 6
[2,] 12
[3,] 4
[4,] 1

Class
-none-none-none-none-

Mode
numeric
character
numeric
function
34

names(l_list)
## NULL
names(l_list) <- c("el1", "el2", "el3")
names(l_list)
## [1] "el1" "el2" "el3"
l_list
##
##
##
##
##
##
##
##
##
##
##
##
##

$el1
[1] 1 2 3 4
$el2
[1,]
[2,]
[3,]
[4,]
[5,]

[,1] [,2]
1
6
2
7
3
8
4
9
5
10

$el3
[1] 1 3 5 7 9

l_list$el2; l_list["el2"]; l_list[["el2"]]; l_list[2]; l_list[[2]] # acesso aos itens da lista


##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##

[1,]
[2,]
[3,]
[4,]
[5,]
$el2

[,1] [,2]
1
6
2
7
3
8
4
9
5
10

[1,]
[2,]
[3,]
[4,]
[5,]

[,1] [,2]
1
6
2
7
3
8
4
9
5
10

[1,]
[2,]
[3,]
[4,]
[5,]

[,1] [,2]
1
6
2
7
3
8
4
9
5
10

35

##
##
##
##
##
##
##
##
##
##
##
##
##

$el2
[1,]
[2,]
[3,]
[4,]
[5,]

[,1] [,2]
1
6
2
7
3
8
4
9
5
10

[1,]
[2,]
[3,]
[4,]
[5,]

[,1] [,2]
1
6
2
7
3
8
4
9
5
10

# o uso de "$" e "[[]]" retorna o elemento componentes da lista


# o uso de "[]" retorna uma lista com os elementos selecionados
c(class(l_list$el1), class(l_list[["el1"]]), class(l_list["el1"]))
## [1] "numeric" "numeric" "list"
l1_list <- list(el1=c(1,2,3,4), el2=matrix(1:10, nrow = 5), el3=(seq.int(1,10,2))); l_list
##
##
##
##
##
##
##
##
##
##
##
##
##

$el1
[1] 1 2 3 4
$el2
[1,]
[2,]
[3,]
[4,]
[5,]

[,1] [,2]
1
6
2
7
3
8
4
9
5
10

$el3
[1] 1 3 5 7 9

is.atomic(l_list)
## [1] FALSE
is.recursive(l_list)
## [1] TRUE
is.atomic("numeric")
## [1] TRUE

36

is.recursive("numeric")
## [1] FALSE
Dimenses e operaes aritmticas em listas
length(l_list)
## [1] 3
length(l1_list)
## [1] 3
dim(l_list)
## NULL
nrow(l_list)
## NULL
ncol(l_list)
## NULL
NROW(l_list)
## [1] 3
NCOL(l_list)
## [1] 1
NROW(l1_list)
## [1] 3
NCOL(l1_list)
## [1] 1
l1 <- list(1:10); l2 <- list(11:20); l1;l2
## [[1]]
## [1] 1

9 10

## [[1]]
## [1] 11 12 13 14 15 16 17 18 19 20

37

#l1 + l2
l1[[1]]+l2[[1]]
##

[1] 12 14 16 18 20 22 24 26 28 30

l1[[1]]-l2[[1]]
##

[1] -10 -10 -10 -10 -10 -10 -10 -10 -10 -10

l1[[1]]*l2[[1]]
##

[1]

11

24

39

56

75

96 119 144 171 200

l1[[1]]/l2[[1]]
##
##

[1] 0.09090909 0.16666667 0.23076923 0.28571429 0.33333333 0.37500000


[7] 0.41176471 0.44444444 0.47368421 0.50000000

Indexando Listas
l1[1:2]
## [[1]]
## [1] 1
##
## [[2]]
## NULL

9 10

l1_list[1:2]
##
##
##
##
##
##
##
##
##
##

$el1
[1] 1 2 3 4
$el2
[1,]
[2,]
[3,]
[4,]
[5,]

[,1] [,2]
1
6
2
7
3
8
4
9
5
10

l1_list[-2]
##
##
##
##
##

$el1
[1] 1 2 3 4
$el3
[1] 1 3 5 7 9

38

l1_list[-3]
##
##
##
##
##
##
##
##
##
##

$el1
[1] 1 2 3 4
$el2
[1,]
[2,]
[3,]
[4,]
[5,]

[,1] [,2]
1
6
2
7
3
8
4
9
5
10

l1_list[2:3]
##
##
##
##
##
##
##
##
##
##

$el2
[1,]
[2,]
[3,]
[4,]
[5,]

[,1] [,2]
1
6
2
7
3
8
4
9
5
10

$el3
[1] 1 3 5 7 9

l1_list["el1"]
## $el1
## [1] 1 2 3 4
l1_list[c(TRUE, FALSE, TRUE)]
##
##
##
##
##

$el1
[1] 1 2 3 4
$el3
[1] 1 3 5 7 9

l1[1]
## [[1]]
## [1] 1

9 10

9 10

l1[[1]]
##

[1]

39

is.list(l1[1])
## [1] TRUE
is.list(l1[[1]])
## [1] FALSE
l1_list[["el1"]]
## [1] 1 2 3 4
l1_list[["el1"]][[3]]
## [1] 3
l1_list[["el2"]][[3,2]]
## [1] 8
#l1_list[["el2"]][[3,3]]
Converso entre vetores e listas
l2 <- c(1,3,5,6,7,9); l2
## [1] 1 3 5 6 7 9
l21 <- as.list(l2); l21
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##

# convertendo vetor em uma lista.

[[1]]
[1] 1
[[2]]
[1] 3
[[3]]
[1] 5
[[4]]
[1] 6
[[5]]
[1] 7
[[6]]
[1] 9

40

#l22 <- as.numeric(l21)


# convertendo uma lista em um vetor (cada elemento da lista deve possuir um valor escalar).
l3 <- list(a=2, b=5, d=c(2,4), e=c(3,5,7), f=c(1,2,3,4)); l3
##
##
##
##
##
##
##
##
##
##
##
##
##
##

$a
[1] 2
$b
[1] 5
$d
[1] 2 4
$e
[1] 3 5 7
$f
[1] 1 2 3 4

#as.numeric(l3)
#as.character(l3)
#l31 <- unlist(l3); l31
Combinando listas
c(l2,l3)
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##

[[1]]
[1] 1
[[2]]
[1] 3
[[3]]
[1] 5
[[4]]
[1] 6
[[5]]
[1] 7
[[6]]
[1] 9
$a
[1] 2
$b
[1] 5
$d
41

##
##
##
##
##
##
##

[1] 2 4
$e
[1] 3 5 7
$f
[1] 1 2 3 4

cbind(l2,l3)
## Warning in cbind(l2, l3): number of rows of result is not a multiple of
## vector length (arg 2)
##
##
##
##
##
##
##

[1,]
[2,]
[3,]
[4,]
[5,]
[6,]

l2
1
3
5
6
7
9

l3
2
5
Numeric,2
Numeric,3
Numeric,4
2

rbind(l2,l3)
## Warning in rbind(l2, l3): number of columns of result is not a multiple of
## vector length (arg 2)
##
[,1] [,2] [,3]
[,4]
[,5]
[,6]
## l2 1
3
5
6
7
9
## l3 2
5
Numeric,2 Numeric,3 Numeric,4 2
str(rbind(l2,l3))
## Warning in rbind(l2, l3): number of columns of result is not a multiple of
## vector length (arg 2)
## List of 12
## $ : num 1
## $ : num 2
## $ : num 3
## $ : num 5
## $ : num 5
## $ : num [1:2] 2 4
## $ : num 6
## $ : num [1:3] 3 5 7
## $ : num 7
## $ : num [1:4] 1 2 3 4
## $ : num 9
## $ : num 2
## - attr(*, "dim")= int [1:2] 2 6
## - attr(*, "dimnames")=List of 2
##
..$ : chr [1:2] "l2" "l3"
##
..$ : NULL

42

eventos1t2015 <list(jan="Confraternizao universal", fev="Carnaval", mar="Tiradentes", abr="NULL", mai="Festa das mes


##
##
##
##
##
##
##
##
##
##
##
##
##
##

$jan
[1] "Confraternizao universal"
$fev
[1] "Carnaval"
$mar
[1] "Tiradentes"
$abr
[1] "NULL"
$mai
[1] "Festa das mes"

#NULL valor especial que representa uma varvel vazia.


#length(NULL)
#length(NA) # NA um valor escalar.
#is.null(NULL)
#is.null(NA)
#l21; l21[[2]] <- NULL # Podemos usar NULL para remover elementos de uma lista.
#l21[[2]] <- NULL; l21
#l21[[2]] <- list(NULL); l21
Data frames so usados para armazenar dados como em planilhas.
A funo data.frame() ser utilizada para a criao dos mesmos.
df1 <- data.frame(LETTERS[1:5], month.name[1:5], seq(1,5), rnorm(5)); df1
##
##
##
##
##
##

1
2
3
4
5

LETTERS.1.5. month.name.1.5. seq.1..5.


rnorm.5.
A
January
1 -0.4335094
B
February
2 1.4059110
C
March
3 2.2192786
D
April
4 0.5448906
E
May
5 -0.6440232

class(df1)
## [1] "data.frame"
str(df1) # mostra a estrutura do objeto
## 'data.frame':
5 obs. of 4 variables:
## $ LETTERS.1.5.
: Factor w/ 5 levels "A","B","C","D",..: 1 2 3 4 5
## $ month.name.1.5.: Factor w/ 5 levels "April","February",..: 3 2 4 1 5
## $ seq.1..5.
: int 1 2 3 4 5
## $ rnorm.5.
: num -0.434 1.406 2.219 0.545 -0.644

43

head(df1)
##
##
##
##
##
##

1
2
3
4
5

LETTERS.1.5. month.name.1.5. seq.1..5.


rnorm.5.
A
January
1 -0.4335094
B
February
2 1.4059110
C
March
3 2.2192786
D
April
4 0.5448906
E
May
5 -0.6440232

names(df1) <- c("col1", "col2", "col3", "col4");df1


##
##
##
##
##
##

1
2
3
4
5

col1
col2 col3
col4
A January
1 -0.4335094
B February
2 1.4059110
C
March
3 2.2192786
D
April
4 0.5448906
E
May
5 -0.6440232

row.names(df1) <- c("l1","l2","l3","l4","l5");df1 # nome para as linhas


##
##
##
##
##
##

l1
l2
l3
l4
l5

col1
col2 col3
col4
A January
1 -0.4335094
B February
2 1.4059110
C
March
3 2.2192786
D
April
4 0.5448906
E
May
5 -0.6440232

rownames(df1)
## [1] "l1" "l2" "l3" "l4" "l5"
colnames(df1)
## [1] "col1" "col2" "col3" "col4"
dimnames(df1)
##
##
##
##
##

[[1]]
[1] "l1" "l2" "l3" "l4" "l5"
[[2]]
[1] "col1" "col2" "col3" "col4"

nrow(df1)
## [1] 5

44

ncol(df1)
## [1] 4
dim(df1)
## [1] 5 4
length(df1)
## [1] 4
names(df1)
## [1] "col1" "col2" "col3" "col4"
data.frame(x=1, y=2:3, z=4:7) # data frames com vetores de tamanhos diferentes
##
##
##
##
##

1
2
3
4

x
1
1
1
1

y
2
3
2
3

z
4
5
6
7

#data.frame(x=1, y=2:3, z=4:6); data.frame(x=1, y=2:3, z=4:13)


fac1 <- factor(sample(letters[1:3], 10, replace=TRUE)); fac1
## [1] a c c a a b b a a a
## Levels: a b c
lo1 <- sample(c(TRUE, FALSE, NA), 10, replace=TRUE); lo1
##

[1]

TRUE

TRUE

TRUE

TRUE FALSE FALSE FALSE FALSE

TRUE

NA

ndf <- rnorm(10); ndf


##
##

[1]
[7]

2.4685558 -1.0239590
0.4626182 -1.4753410

0.2345870
0.8281403

1.3815710 -0.3977395 -0.9677525


0.3575973

df2 <- data.frame(fac1, ndf, ndf); df2; head(df2)


##
##
##
##
##
##
##
##
##
##
##

1
2
3
4
5
6
7
8
9
10

fac1
a
c
c
a
a
b
b
a
a
a

ndf
2.4685558
-1.0239590
0.2345870
1.3815710
-0.3977395
-0.9677525
0.4626182
-1.4753410
0.8281403
0.3575973

ndf.1
2.4685558
-1.0239590
0.2345870
1.3815710
-0.3977395
-0.9677525
0.4626182
-1.4753410
0.8281403
0.3575973
45

##
##
##
##
##
##
##

fac1
ndf
ndf.1
a 2.4685558 2.4685558
c -1.0239590 -1.0239590
c 0.2345870 0.2345870
a 1.3815710 1.3815710
a -0.3977395 -0.3977395
b -0.9677525 -0.9677525

1
2
3
4
5
6

summary(fac1)
## a b c
## 6 2 2
summary(lo1)
##
Mode
## logical

FALSE
4

TRUE
5

##
Min. 1st Qu.
## -1.4750 -0.8252

Median
0.2961

NA's
1

summary(ndf)
Mean 3rd Qu.
0.1868 0.7368

Max.
2.4690

summary(df2)
##
##
##
##
##
##
##

fac1
a:6
b:2
c:2

ndf
Min.
:-1.4753
1st Qu.:-0.8252
Median : 0.2961
Mean
: 0.1868
3rd Qu.: 0.7368
Max.
: 2.4686

ndf.1
Min.
:-1.4753
1st Qu.:-0.8252
Median : 0.2961
Mean
: 0.1868
3rd Qu.: 0.7368
Max.
: 2.4686

View(df2) # no permite trocas de valores


View(fac1)
View(lo1)
View(ndf)
df21 <- edit(df2) # permite troca de valores e salva em df21
df21
##
##
##
##
##
##
##
##
##
##
##

1
2
3
4
5
6
7
8
9
10

fac1
a
c
c
a
a
b
b
a
a
a

ndf
2.4685558
-1.0239590
0.2345870
1.3815710
-0.3977395
-0.9677525
0.4626182
-1.4753410
0.8281403
0.3575973

ndf.1
2.4685558
-1.0239590
0.2345870
1.3815710
-0.3977395
-0.9677525
0.4626182
-1.4753410
0.8281403
0.3575973

46

fix(df2);df2 # permite a troca de valores e salva em df2


##
##
##
##
##
##
##
##
##
##
##

1
2
3
4
5
6
7
8
9
10

fac1
a
c
c
a
a
b
b
a
a
a

ndf
2.4685558
-1.0239590
0.2345870
1.3815710
-0.3977395
-0.9677525
0.4626182
-1.4753410
0.8281403
0.3575973

ndf.1
2.4685558
-1.0239590
0.2345870
1.3815710
-0.3977395
-0.9677525
0.4626182
-1.4753410
0.8281403
0.3575973

length(df1) # retorna o nmero de colunas do data frame, o mesmo que ncol()


## [1] 4
ncol(df1)
## [1] 4
names(df1) # retorna o mesmo de colnames()
## [1] "col1" "col2" "col3" "col4"
df3 <- data.frame(".99a"=1, "#@-$"=2:3, "()*&"=4:7, check.names = FALSE); df3
##
##
##
##
##

1
2
3
4

.99a #@-$ ()*&


1
2
4
1
3
5
1
2
6
1
3
7

# check.names=FALSE foi usado para o uso de nomes de variveis no vlidos


Indexao de Data Frames
Podemos usar como ndices (inteiros positivos e negativos, valores lgicos e cacteres)
df1[1:3, -2]; df1[, 4]
##
col1 col3
col4
## l1
A
1 -0.4335094
## l2
B
2 1.4059110
## l3
C
3 2.2192786
## [1] -0.4335094

1.4059110

2.2192786

0.5448906 -0.6440232

47

df2[3,3]; df2[3,3]
## [1] 0.234587
## [1] 0.234587
df2[c(TRUE, FALSE, TRUE, TRUE,TRUE, FALSE,FALSE,FALSE,TRUE, TRUE), c("ndf", "ndf.1")]
##
##
##
##
##
##
##

ndf
ndf.1
1
2.4685558 2.4685558
3
0.2345870 0.2345870
4
1.3815710 1.3815710
5 -0.3977395 -0.3977395
9
0.8281403 0.8281403
10 0.3575973 0.3575973

class(df1[1:3,-2]); class(df1[1:3,2]); class(df2[1:5,3])


## [1] "data.frame"
## [1] "factor"
## [1] "numeric"
df2$ndf[3:7]; df2[[2]][3:7]; df2[["ndf"]][3:7]
## [1]

0.2345870

1.3815710 -0.3977395 -0.9677525

0.4626182

## [1]

0.2345870

1.3815710 -0.3977395 -0.9677525

0.4626182

## [1]

0.2345870

1.3815710 -0.3977395 -0.9677525

0.4626182

df1[df1$col4>0 | df1$col3<3, "col2"]; subset(df1, col4>00 | col3<3, col2)


## [1] January February March
April
## Levels: April February January March May
##
##
##
##
##

col2
l1 January
l2 February
l3
March
l4
April

Manipulao bsica de Data Frames


t(df1) # na transposio todas as colunas so convertidas para o mesmo tipo, vira uma matriz.
##
##
##
##
##

col1
col2
col3
col4

l1
"A"
"January"
"1"
"-0.4335094"

l2
"B"
"February"
"2"
" 1.4059110"

l3
"C"
"March"
"3"
" 2.2192786"

48

l4
"D"
"April"
"4"
" 0.5448906"

l5
"E"
"May"
"5"
"-0.6440232"

is.matrix(t(df1))
## [1] TRUE
dfn <- data.frame(am=sample(c(TRUE, FALSE), size = 5, replace=TRUE), logf=seq(6:10) ); dfn
##
##
##
##
##
##

am logf
1 TRUE
1
2 FALSE
2
3 FALSE
3
4 TRUE
4
5 TRUE
5

cbind(df1,dfn)
##
##
##
##
##
##

l1
l2
l3
l4
l5

col1
col2 col3
col4
am logf
A January
1 -0.4335094 TRUE
1
B February
2 1.4059110 FALSE
2
C
March
3 2.2192786 FALSE
3
D
April
4 0.5448906 TRUE
4
E
May
5 -0.6440232 TRUE
5

#rbind(df1,dfn)
dfn <- cbind(dfn,logfd=c(3,17,23,5,6), logfe=c(NA,NA,NaN,Inf,NA))
#rbind(df1,dfn) # nmero de colunas devem ser iguais.
names(dfn) <- c("col1", "col2", "col3", "col4"); dfn
##
##
##
##
##
##

col1 col2 col3 col4


1 TRUE
1
3
NA
2 FALSE
2
17
NA
3 FALSE
3
23 NaN
4 TRUE
4
5 Inf
5 TRUE
5
6
NA

#rbind(df1,dfn)
dfn <- data.frame(col1=letters[6:10], col2=month.abb[6:10], col3=rnorm(5)<0.05, col4=rnorm(5)); dfn
##
##
##
##
##
##

1
2
3
4
5

col1 col2 col3


col4
f Jun TRUE 0.0399669
g Jul FALSE -1.1425487
h Aug FALSE -0.3823524
i Sep FALSE -0.4216101
j Oct FALSE 0.8572720

rbind(df1,dfn)
##
col1
col2 col3
col4
## l1
A January
1 -0.4335094
## l2
B February
2 1.4059110
49

##
##
##
##
##
##
##
##

l3
l4
l5
6
7
8
9
10

C
D
E
f
g
h
i
j

March
April
May
Jun
Jul
Aug
Sep
Oct

3
4
5
1
0
0
0
0

2.2192786
0.5448906
-0.6440232
0.0399669
-1.1425487
-0.3823524
-0.4216101
0.8572720

cbind(df1,dfn)
##
##
##
##
##
##

l1
l2
l3
l4
l5

col1
col2 col3
col4 col1 col2 col3
col4
A January
1 -0.4335094
f Jun TRUE 0.0399669
B February
2 1.4059110
g Jul FALSE -1.1425487
C
March
3 2.2192786
h Aug FALSE -0.3823524
D
April
4 0.5448906
i Sep FALSE -0.4216101
E
May
5 -0.6440232
j Oct FALSE 0.8572720

merge(df1,dfn, by="col3")
##
col3 col1.x col2.x
col4.x col1.y col2.y
col4.y
## 1
1
A January -0.4335094
f
Jun 0.0399669
merge(df1,dfn, by="col3", all=TRUE)
##
##
##
##
##
##
##
##
##
##

col3 col1.x
col2.x
col4.x col1.y col2.y
col4.y
0
<NA>
<NA>
NA
g
Jul -1.1425487
0
<NA>
<NA>
NA
h
Aug -0.3823524
0
<NA>
<NA>
NA
i
Sep -0.4216101
0
<NA>
<NA>
NA
j
Oct 0.8572720
1
A January -0.4335094
f
Jun 0.0399669
2
B February 1.4059110
<NA>
<NA>
NA
3
C
March 2.2192786
<NA>
<NA>
NA
4
D
April 0.5448906
<NA>
<NA>
NA
5
E
May -0.6440232
<NA>
<NA>
NA

1
2
3
4
5
6
7
8
9

colSums(dfn[,3:4]) # rowSums - para data frames com valores numricos


##
##

col3
col4
1.000000 -1.049272

colMeans(dfn[,3:4]) # rowMeans
##
##

col3
col4
0.2000000 -0.2098545

Mais manipulao de Data Frames

50

dados1<-data.frame(Frutas=c("Manga","Abacate","Banana"), Quantidade=c(10,15,25))
dados1
##
Frutas Quantidade
## 1
Manga
10
## 2 Abacate
15
## 3 Banana
25
dados1$Frutas

# ou dados1[1]

## [1] Manga
Abacate Banana
## Levels: Abacate Banana Manga
dados1$Quantidade # ou dados1[2]
## [1] 10 15 25
dados1$preco <- c(2.10, 3.25, 2.59)
dados1
##
Frutas Quantidade preco
## 1
Manga
10 2.10
## 2 Abacate
15 3.25
## 3 Banana
25 2.59
dados1$total <-dados1$Quantidade*dados1$preco
dados1
##
Frutas Quantidade preco total
## 1
Manga
10 2.10 21.00
## 2 Abacate
15 3.25 48.75
## 3 Banana
25 2.59 64.75
dados<-cbind(dados1, data.frame(Calorias=c(100,150,80)) ) # cria uma coluna
dados
##
Frutas Quantidade preco total Calorias
## 1
Manga
10 2.10 21.00
100
## 2 Abacate
15 3.25 48.75
150
## 3 Banana
25 2.59 64.75
80

dados<-rbind(dados1, data.frame(Frutas="Abacaxi", Quantidade=5, preco=4.0, total=dados$Quantidade*dados$


dados
##
##
##
##
##
##
##

1
2
3
4
5
6

Frutas Quantidade preco total


Manga
10 2.10 21.00
Abacate
15 3.25 48.75
Banana
25 2.59 64.75
Abacaxi
5 4.00 21.00
Abacaxi
5 4.00 48.75
Abacaxi
5 4.00 64.75

51

dados$situpreco <-0
dados
##
##
##
##
##
##
##

1
2
3
4
5
6

Frutas Quantidade preco total situpreco


Manga
10 2.10 21.00
0
Abacate
15 3.25 48.75
0
Banana
25 2.59 64.75
0
Abacaxi
5 4.00 21.00
0
Abacaxi
5 4.00 48.75
0
Abacaxi
5 4.00 64.75
0

for (i in 1:6){
ifelse(dados[i,3]<=2.5, dados[i,5]<-"Baixo",
ifelse(dados[i,3]<=3.9, dados[i,5]<-"Mdio",
dados[i,5]<-"Alto"))
}
dados
##
##
##
##
##
##
##

1
2
3
4
5
6

Frutas Quantidade preco total situpreco


Manga
10 2.10 21.00
Baixo
Abacate
15 3.25 48.75
Mdio
Banana
25 2.59 64.75
Mdio
Abacaxi
5 4.00 21.00
Alto
Abacaxi
5 4.00 48.75
Alto
Abacaxi
5 4.00 64.75
Alto

Importao de dados para dentro de um DataFrame


read.table(file, header=True, sep=, dec=.)
read.csv(file, header=True, sep=,, dec=.)
read.csv2(file, header=True, sep=;, dec=.)
read.delim(file, header=True, sep=, dec=.)
read.delim2(file, header=True, sep=, dec=,)
read.xlsx(file=arquivo.xlsx, header=True, sheeteIndex=?, sheeteName=?) # deve importar o pacote
xlsx e sheeteIndex=1 ou sheeteName=plan1
arquivo1 =read.csv(C:/Users/lsr10/Documents/DoubsEnv.csv, sep=,, header=T)
arquivo2=read.csv(clipboard, sep=,) # utilisar em base pequena - apanhar os dados da memria do
computador #
arquivo3=read.csv(file.choose()) # abre janela para escolha do arquivo "
head(arquivo1); head(arquivo2); head(arquivo3) # mostra os registros iniciais do arquivo
arquivo4=read.csv(file.choose(), sep=;) # arquivo modificado troca de , por ; e . por ,; head(arquivo4)
mean(arquivo4$oxy)
arquivo4=read.csv(file.choose(), sep=;, dec=,)
head(arquivo4)
mean(arquivo4$oxy
Exportao de dados no R
52

write.table(x, file, sep=" , dec=., row.names=T, col.names=T)


write.csv()
write.csv2()
write.xlsx()
Estrutura condicional no R (if e ifelse)
x == y - x igual a y
x != y - x no igual a y
x > y - x maior que y
x < y - x menor que y
x >= y - x maior ou igual a y
x <= y - x menor ou igual a y
& ou && - para E (AND)
| ou || - para OU (OR)
if (expr_1) { expr_2 . . . expr_n} else {exp_1n . . . . exp_nn }
if(FALSE) message("Good lack")
if(TRUE) message("Bom dia!")
## Bom dia!
ec1 <- 5; if (ec1<10) {print(ec1)} else {print(sqrt(ec1))}
## [1] 5
if(ec1>2) {eca <- 3*ec1} else if(ec1<10) {ecb <- ec1*sqrt(5)}
x1=5; x2=8; x3=21
if (x2<x3) {cat(x2)}
## 8
if(x2>x1) {cat(x2)}
## 8
if(x3>x2 & x3<=x2*x1&x1!=x2) {cat("Teste do if")}
## Teste do if
if(x3>x2 & x3>=x2*x1&x1!=x2) {cat("Teste do if")} else { cat("testando o seno")}
## testando o seno

53

#ifelse(exp_1, se verdade, se falso)


ifelse(x3>x1, x1**3, x3*10)
## [1] 125
ifelse(x3%%2==0, "nmero par", "nmero impar")
## [1] "nmero impar"
ifelse(exp_1, se verdade, se falso)
ifelse(x3>x1, x1**3, x3*10)
## [1] 125
ifelse(x3%%2==0, "nmero par", "nmero impar")
## [1] "nmero impar"
Estruturas de repetio for while e repeat
Lao com a estrutura for
for (i in n_objeto) { expr_1 . . . expn} # onde n_objeto pode ser: vetor, matriz e data frames i uma
variavel (pode ser qualquer letra)
for (i in 1:10){print(sqrt(i))}
##
##
##
##
##
##
##
##
##
##

[1]
[1]
[1]
[1]
[1]
[1]
[1]
[1]
[1]
[1]

1
1.414214
1.732051
2
2.236068
2.44949
2.645751
2.828427
3
3.162278

testefor=0
for (i in 1:10) {testefor[i]<-i**2}; testefor
##

[1]

16

25

36

49

64

81 100

soma=0; testefor1=c(10,15,20,25,35,45,50,55,60); n=length(testefor1)


for (i in 1:n){soma=soma+testefor1[i]}
media=soma/n; media; mean(testefor1)
## [1] 35
54

## [1] 35
Lao com a estrutura while
while (condicao) expr
while(condicao){ # corpo do lao # }
#i=1
#while(TRUE){ #lao infinito <Esc> para sair#
# i=i+1
#}
i
## [1] 9
i=1; while(TRUE){ i=i+1
if(i == 20) break}
print(i)
## [1] 20
i=1; while(i<20){i=i+1}; print(i)
## [1] 20
vteste=vector(); i=1; while(i<20){vteste[i]=i^2
i=i+1}; print(vteste)
## [1]
1
4
## [18] 324 361

16

25

36

49

64

81 100 121 144 169 196 225 256 289

Lao com estrutura repeat


repeat expr
repeat { g <- rnorm(1) #gera nmeros aleatrios de uma distribuio normal
if (g > 1.0) break
cat(g,"\n")}
##
##
##
##
##
##

0.8388917
0.534484
-0.4380874
-0.2955774
-0.5412241
-1.01756

O comando wich

55

which(LETTERS == "R")
## [1] 18
which(ll <- c(TRUE, FALSE, TRUE, NA, FALSE, FALSE, TRUE)) #> 1 3 7
## [1] 1 3 7
names(ll) <- letters[seq(ll)]
which(ll)
## a c g
## 1 3 7
which((1:12)%%2 == 0)
## [1]

8 10 12

which(1:10 > 3, arr.ind = TRUE)


## [1]

9 10

( m <- matrix(1:12, 3, 4) )
##
[,1] [,2] [,3] [,4]
## [1,]
1
4
7
10
## [2,]
2
5
8
11
## [3,]
3
6
9
12
div.3 <- m %% 3 == 0
which(div.3)
## [1]

9 12

which(div.3, arr.ind = TRUE)


##
##
##
##
##

[1,]
[2,]
[3,]
[4,]

row col
3
1
3
2
3
3
3
4

rownames(m) <- paste("Case", 1:3, sep = "_")


which(m %% 5 == 0, arr.ind = TRUE)
##
row col
## Case_2
2
2
## Case_1
1
4

56

dim(m) <- c(2, 2, 3); m


##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##

, , 1
[1,]
[2,]

[,1] [,2]
1
3
2
4

, , 2
[1,]
[2,]

[,1] [,2]
5
7
6
8

, , 3
[1,]
[2,]

[,1] [,2]
9
11
10
12

which(div.3, arr.ind = FALSE)


## [1]

9 12

which(div.3, arr.ind = TRUE)


##
##
##
##
##

[1,]
[2,]
[3,]
[4,]

row col
3
1
3
2
3
3
3
4

vm <- c(m)
dim(vm) <- length(vm)
which(div.3, arr.ind = TRUE)
##
##
##
##
##

[1,]
[2,]
[3,]
[4,]

row col
3
1
3
2
3
3
3
4

Atribuies mltiplas
a<-b<-c<-1:10
a; b; c

# atribuies mltiplas

##

[1]

9 10

##

[1]

9 10
57

##

[1]

9 10

Criando e chamando funes


Com o uso de funes evitamos a repetio de cdigos.
A funo function() ser utilizada na sua criao.
function ( arglist ) body
funcaoteste<-function(arg1,. . . ,argn){rotina da funcao}
Clculo de uma soma
cq <- function(x, y) {sqrt(x)+y^2}; cq
## function(x, y) {sqrt(x)+y^2}
cq(1,7); cq(seq.int(1:10), 2)
## [1] 50
##
##

[1] 5.000000 5.414214 5.732051 6.000000 6.236068 6.449490 6.645751


[8] 6.828427 7.000000 7.162278

Clculo da mediana
mediana=function(dado){
n=length(dado)
dado=sort(dado)
if (n%%2==0){
med1=(dado[n/2]+dado[n/2+1])/2
}else{
med1=dado[(n+1)/2]
}
return(med1)
}
mediana(seq.int(1:10))
## [1] 5.5
mediana(seq.int(1:11))
## [1] 6
Clculo da hipotenusa de um tringulo retngulo
funcalhipo<-function(b,c){
a=sqrt(b^2+c^2)
return(a)}
funcalhipo(2,5)

58

## [1] 5.385165
Criao de Grficos
No R possvel criar inmeros tipos de grficos. Nesta etapa apresentaremos uma pequena amostra das
possibilidades.
Histograma
hist(dado, . . . ) # main, xlab, ylab, xlim, ylim, col, border
md=c(1,2,3,4,5); me=c(6,7,8,9,10,12)
hist(me, main="Teste de Histograma", xlab="xxx", ylab="yyy")

1.5
0.0

0.5

1.0

yyy

2.0

2.5

3.0

Teste de Histograma

10

xxx
Grfico Boxplot
boxplot(dado, . . . ) # main, xlab, ylab, xlim, ylim, border, horizontal
boxplot(me, main="Teste Boxplot", col=2, horizontal=TRUE)

59

11

12

Teste Boxplot

boxplot(me, main="Teste Boxplot", col=2) #testar col=3

60

10

11

12

10

11

12

Teste Boxplot

Grfico Pizza
pie(dado, . . . ) # main, labels, col
pie(me, main="Teste grfico de Pizza")

61

Teste grfico de Pizza

1
4

6
5

legeng(dado, ) - vetor de texto para cada fatia


x - posio da legenda no grfico =bottomright, bottom, bottomleft,left, top, topright, right,
center
fiil - vetor de cores de cada fatia
cex - tamanho da legenda
me
## [1]

9 10 12

mep<-0
tam=length(me)
for (i in 1:tam){
mep[i]<-(me[i]/sum(me))
}
pie(me, main="Teste grfico

de Pizza", labels=c("0.1153846","0.1346154","0.1538462","0.1730769","0.1923

62

Teste grfico de Pizza

0.1346154

0.1538462

0.1153846
0.1730769

0.2307692
0.1923077

pie(me, main="Teste grfico de Pizza", labels=mep)


legend("topright",fill=c(1,2,3,4,5,6), legend=c("um","dois","trs","quatro","cingo","seis"))

63

Teste grfico de Pizza


um
0.134615384615385 dois
trs
quatro
0.115384615384615
cingo
seis

0.153846153846154

0.173076923076923

0.230769230769231
0.192307692307692

Grfico de Barra
barplot(x,. . . ) # names, main, col
par(mfrow=c(1,1))
barplot(me, main=("vetor me"), col=topo.colors(6))

64

10

12

vetor me

barplot(md, main=("vetor md"), col=topo.colors(6))

65

vetor md

Grfico com a funo plot()


plot(cars)

66

100 120
80
60
0

20

40

dist

10

15
speed

plot(1:5,6:10)

67

20

25

10
9
8
6

6:10

1:5

set.seed(99)
x=1+rnorm(200,3,2)
mean(x); var(x)
## [1] 3.80829
## [1] 3.876801
plot(x, main="Retorno diros de ativos", ylab= "retorno", xlab="dias")
abline(lm(x~seq(1,200,1)))

68

4
2
2

retorno

Retorno diros de ativos

50

100

150

200

dias
Atividades
1- Qual o tamanho desta lista: list(A=Tucum, B=Araa, list(C=Pitomba, D=Inhar, E=Abric),
F=Oit, G=NULL)?
2- Criar uma lista de variveis que contenha todos os nmeros quadrados na faixa de 100 a 109 como primeiro
elemento, de 110 a 119 no segundo elemento, de 120 a 129 no terceiro elemento, de 130 a 139 no quarto
elemento, de 140 a 149 no quinto elemento.

69

Você também pode gostar