Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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
n!
x!(nx!)
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
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]
TRUE 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
$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
## [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
[[1]]
NULL
[[2]]
NULL
[[3]]
NULL
## [1] 00 00 00
xl <- c(TRUE,TRUE,FALSE,FALSE); xl
## [1]
TRUE
"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
[1] 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5
[1] 1 2 3 1 2 3 1 2 3 1 2 3
[1] 1 2 3 1 2 3 1 2 3 1
[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
10
"Bacupar"
[1]
[1]
[1]
[1]
[1]
[1]
"Fruta po"
"Ju"
"Ju"
"Bacupar"
"Bacupar"
"Bacupar"
[1]
[1]
[1]
[1]
[1]
[1]
NA
NA
NA
NA
NA
NA
2.000000
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
[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
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
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
trs
3
<NA> cinco
NA
5
vi1[c(-3.5, -5.9)]
##
##
um
1
dois quatro
2
4
cinco
5
14
## [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
## [1] 2 3 4 5 6 7
v7-va
## [1] 0 1 2 3 4 5
v7*va
## [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
##
[,1]
## [1,]
21
#v7%*%v9
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
[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)
## [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)
##
##
Median
30
Max.
40
18
summary(vpeso)
##
##
Median
60
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
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
, , deux
um
dois
trs
quatro
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"
um
dois
trs
quatro
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
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"
um
dois
trs
quatro
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
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
rbind(m_matrix, m1_matrix)
##
##
##
##
##
##
##
##
##
um
dois
trs
quatro
um
dois
trs
quatro
um
dois
trs
quatro
m_matrix-m1_matrix
##
##
##
##
##
um
dois
trs
quatro
29
m_matrix*m1_matrix
##
##
##
##
##
um
dois
trs
quatro
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
##
##
##
##
##
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
um
dois
trs
quatro
30
, , um, one
um
dois
trs
quatro
, , dois, one
um
dois
trs
quatro
, , trs, one
um
dois
trs
quatro
, , quatro, one
one two three
um
10 20
30
dois
40 50
60
trs
70 80
90
quatro 100 110
120
, , um, two
um
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
dois
trs
quatro
8
14
20
10
16
22
12
18
24
, , dois, two
um
dois
trs
quatro
, , trs, two
um
dois
trs
quatro
, , 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
, , dois, three
um
dois
trs
quatro
, , trs, three
um
dois
trs
quatro
, , quatro, three
32
##
##
##
##
##
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
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")
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
[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
$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
l1[[1]]/l2[[1]]
##
##
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
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
[[1]]
[1] 1
[[2]]
[1] 3
[[3]]
[1] 5
[[4]]
[1] 6
[[5]]
[1] 7
[[6]]
[1] 9
40
$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
$jan
[1] "Confraternizao universal"
$fev
[1] "Carnaval"
$mar
[1] "Tiradentes"
$abr
[1] "NULL"
$mai
[1] "Festa das mes"
1
2
3
4
5
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
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
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
[1]
TRUE
TRUE
TRUE
TRUE
NA
[1]
[7]
2.4685558 -1.0239590
0.4626182 -1.4753410
0.2345870
0.8281403
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
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
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
1
2
3
4
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
0.2345870
0.4626182
## [1]
0.2345870
0.4626182
## [1]
0.2345870
0.4626182
col2
l1 January
l2 February
l3
March
l4
April
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
##
##
##
##
##
##
#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
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
col3
col4
1.000000 -1.049272
colMeans(dfn[,3:4]) # rowMeans
##
##
col3
col4
0.2000000 -0.2098545
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
1
2
3
4
5
6
51
dados$situpreco <-0
dados
##
##
##
##
##
##
##
1
2
3
4
5
6
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
53
[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
## [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
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
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
[1,]
[2,]
[3,]
[4,]
row col
3
1
3
2
3
3
3
4
56
, , 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
9 12
[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
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
60
10
11
12
10
11
12
Teste Boxplot
Grfico Pizza
pie(dado, . . . ) # main, labels, col
pie(me, main="Teste grfico de Pizza")
61
1
4
6
5
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
0.1346154
0.1538462
0.1153846
0.1730769
0.2307692
0.1923077
63
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
65
vetor md
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
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