TOPICOS FUNDAMENTAIS
O R é uma linguagem de programação que permite manipular dados, fazer calculos e gráficos estatı́sticos.
O programa está disponivel gratuitamente em:
http://www.r-project.org/
Há lista de discussão para troca de informações, perguntas e respostas sobre o uso da linguagem R em:
http://br.groups.yahoo.com/group/R STAT/
Referências e/ou apostilas (português e inglês) podem ser obtidas no seguinte site:
http://cran.r-project.org/doc/contrib/
Funcionalidades
Pode-se designar nomes a objetos R usando a combinação A <- b(A recebe b), b -> A (b vai em A) ou A
= b (A recebe b)
>
>
>
>
A <- 2
B <- 3
C = A + B
C
[1] 5
Comandos colocados entre parenteses mostram o seu resultado na tela.
> (C = A + B)
[1] 5
O R usa o ponto (.) como separador decimal, assim, se for importar dados que usam virgulas como separadores
decimais, troque-as por pontos (.) usando comandos de localizar e substituir diretamente no arquivo fonte ou
observe os parametros de conversão no processo de leitura no R.
O R oferece comandos de ajuda.
help.start() ## inicia documentação na forma de arquivos html visualizados no seu browser (Inglês)
help (topico) ## inicia uma janela de ajuda sobre topico
Ou apenas com o ponto de interrogação (?) seguido do topico
?(topico)
Para sair com segurança do R (encerrar) use o comando q(). Um dialogo aparecera perguntando se quer
”salvar” o espaço de trabalho.
Save workspace image? [y/n/c]:
Usualmente se utiliza responder n (não)
Palavras Reservadas
NA ## valores faltantes
NaN ## valor não representavel por número
Inf ## valor indeterminado
c q s t C D F I T diff exp log mean pi range rank var
FALSE Inf NA NaN NULL TRUE break else for function
if in next repeat while
Operadores Aritmeticos (reservado)
+ - * / soma, subtração, produto e divisão
sqrt() raiz quadrada
abs() valor absoluto (positivo)
sin() cos() tan() funções trigonometricas
asin() acos() atan() funções trigonometricas inversas
sinh() cosh() tanh() funções hiperbolicas
asinh() acosh() atanh() funções hiperbolicas inversas
exp() log() exponencial e logaritmo neperiano
log10() logaritimo na base-10
Operadores lógicos
Os operadores lógicos são
< : menor do que,
<= : menor ou igual
> : maior do que,
>= : maior ou igual
!= : não igual (diferente)
Manipulação de objetos na Workspace
objects() mostra os objetos atualmente presentes na WS
rm() remove um objeto da WS
rm(list = ls()) remove todos os objetos da WS
<- ou -> direciona um conteúdo para um objeto
= equivale a <-
O R como uma calculadora cientı́fica
> 3 + 5
[1] 8
> sin(20) + cos(17) - pi * 10
[1] -30.77814
Objetos (armazenados na memoria ou WS (workspace))
ˆ vetores;
ˆ fatores;
ˆ matrizes e arrays;
ˆ listas;
ˆ data-frames (tabelas);
ˆ funções;
ˆ etc.
VETORES
> v2 <- c(1, 2, 4.6)
> v2
[1] 1.0 2.0 4.6
> v2[2]
[1] 2
## mostra o valor da segunda posição do vetor
> v2[2] <- 1.34
> v2
[1] 1.00 1.34 4.60
## coloca o valor 1,34 na segunda posição do vetor
Removendo elementos do vetor
> v3 <- c(2, 3, 10, 6, 13, 12)
> (v3[5])
[1] 13
## perceba que o comando (v3[5]) mostra o valor da quinta posição.
> (v3[-5])
[1]
2
3 10
6 12
## com o comando (v3[-5]) remove o valor da quinta posição.
> (v3[-(2:4)])
[1]
2 13 12
## com o comando (v3[-(2:4)]) remove os valores entre a segunda e a quarta posição (inclusive a segunda e
quarta posição).
Divisões em um vetor
> c(2.35, 1.45, 7.11)/5
[1] 0.470 0.290 1.422
## Divisão simples dos elementos do vetor.
> c(2.35, 1.45, 7.11)%/%5
[1] 0 0 1
## Retorna apenas a parte inteira.
> c(2.35, 1.45, 7.11)%%2
[1] 0.35 1.45 1.11
## Aparece apenas o resto da divisão (1.45 não é divisivel por 2).
Escrevendo uma equação com comandos aninhados
> (v2.calc <- sin(n <- 1:6) + cos(v2) - pi * (v2/n))
[1] -1.7598194 -0.9668168 -4.7881413 -1.0018984 -1.5721183
[6] -2.8001224
Controlando sequências em vetores numéricos
INTEIROS
Criando uma sequência 0, 1, 2, ... ,10.
Quando dois números são separados por dois pontos o R entente como origem o número do lado esquerdo e
como final o número do lado direito
> a = 0
> b = 10
> a:b
[1]
0
1
2
3
4
5
6
7
8
9 10
[1] 10
9
8
7
6
5
4
3
2
1
3
4
5
6
7
8
9 10
> b:a
0
> v2 <- 0:10
> v2
[1]
0
1
2
Vetores De Caracteres
O R também constrói vetores com objetos. Como por exemplo:
> nomes <- c("Marta", "Regina", "Mario", "Pedro",
+
"Mauricio", "Marcelo", "Patricia", "Cintia",
+
"Abigail", "Renato")
> nomes
[1] "Marta"
[6] "Marcelo"
"Regina"
"Mario"
"Patricia" "Cintia"
"Pedro"
"Abigail"
"Mauricio"
"Renato"
E também vetores com os meses.
> format(ISOdate(2000, 1:12, 1), "%B")
[1] "janeiro"
[5] "maio"
[9] "setembro"
"fevereiro" "março"
"junho"
"julho"
"outubro"
"novembro"
"abril"
"agosto"
"dezembro"
Juntando elementos de vetores
paste(a,b): junta os dados do vetor ’a’ com dados do vetor ’b’, caso a caso (com possibilidade de reciclagem).
> nomes
[1] "Marta"
[6] "Marcelo"
"Regina"
"Mario"
"Patricia" "Cintia"
"Pedro"
"Abigail"
"Mauricio"
"Renato"
> paste(nomes, 10:1)
[1] "Marta 10"
"Regina 9"
[5] "Mauricio 6" "Marcelo 5"
[9] "Abigail 2" "Renato 1"
"Mario 8"
"Pedro 7"
"Patricia 4" "Cintia 3"
> paste(letters[1:6], 1:9, sep = "")
[1] "a1" "b2" "c3" "d4" "e5" "f6" "a7" "b8" "c9"
## Observe a reciclagem
> rep(paste("T", 1:3, sep = ""), c(4, 4, 3))
[1] "T1" "T1" "T1" "T1" "T2" "T2" "T2" "T2" "T3" "T3" "T3"
## Note que no comando o vetor orientou a repetição de cada número.
M A T R I Z E S (bidimensionais)
> args(matrix)
function (data = NA, nrow = 1, ncol = 1, byrow = FALSE, dimnames = NULL)
NULL
Queremos a matriz 4x3 a partir do vetor (1 2 3 4 5 6 7 8 9 10 11 12)


1 2 3
 4 5 6 

m1 = 
 7 8 9 
10 11 12
com entrada dos valores por linhas
> (m1 <- matrix(1:12, nc = 3, by = T))
[1,]
[2,]
[3,]
[4,]
[,1] [,2] [,3]
1
2
3
4
5
6
7
8
9
10
11
12
## Note que não foi necessário dizer o número de linhas.
Queremos, agora, uma matriz m2 4x3 a partir do mesmo vetor (1 2 3 4 5 6 7 8 9 10 11 12),com entrada dos
valores por colunas:


1 5 9
 2 6 10 

m2 = 
 3 7 11 
4 8 12
> (m2 <- matrix(1:12, ncol = 3))
[1,]
[2,]
[3,]
[4,]
[,1] [,2] [,3]
1
5
9
2
6
10
3
7
11
4
8
12
Nomeando linhas e colunas da matriz
> dimnames(m1) <- list(c("L1", "L2", "L3", "L4"),
+
c("C1", "C2", "C3"))
> m1
C1 C2 C3
L1 1 2 3
L2 4 5 6
L3 7 8 9
L4 10 11 12
... ou
> m1.a <- matrix(1:12, ncol = 3, byrow = F, dimnames = list(c("L1",
+
"L2", "L3", "L4"), c("C1", "C2", "C3")))
> m1.a
L1
L2
L3
L4
C1 C2 C3
1 5 9
2 6 10
3 7 11
4 8 12
Inspecionando a matriz
> m2
[1,]
[2,]
[3,]
[4,]
[,1] [,2] [,3]
1
5
9
2
6
10
3
7
11
4
8
12
> length(m2)
[1] 12
## números de elementos da matriz
> dim(m2)
[1] 4 3
## dimensão da matriz (linhas x colunas)
> nrow(m2)
[1] 4
## número de linhas da matriz
> ncol(m2)
[1] 3
## número de colunas da matriz
> m2[1, 2]
[1] 5
## elemento da primeira linha e segunda coluna
> m2[, 1]
[1] 1 2 3 4
## todos elementos da primeira coluna
> m2[1, ]
[1] 1 5 9
## todos elementos da primeira linha
> m2[c(1, 3), c(1, 3)]
[1,]
[2,]
[,1] [,2]
1
9
3
11
## submatriz com linhas 1 e 3 e colunas 1 e 3
> m2[1:2, 2:3]
[1,]
[2,]
[,1] [,2]
5
9
6
10
## submatriz com linhas 1 e 2 e colunas 2 e 3
Gerando uma matriz identidade
> diag(3)
[1,]
[2,]
[3,]
[,1] [,2] [,3]
1
0
0
0
1
0
0
0
1
> diag(5)
[1,]
[2,]
[3,]
[4,]
[5,]
[,1] [,2] [,3] [,4] [,5]
1
0
0
0
0
0
1
0
0
0
0
0
1
0
0
0
0
0
1
0
0
0
0
0
1
Operações basicas com matrizes
t() transposta
%*% produto interno
det() determinante
solve() inversa de uma matriz ou resolver sistema de equações lineares
> (m4 <- matrix(1:6, nc = 3))
[1,]
[2,]
[,1] [,2] [,3]
1
3
5
2
4
6
> (m5 <- matrix(10 * (1:6), nc = 3))
[1,]
[2,]
[,1] [,2] [,3]
10
30
50
20
40
60
> m4 + m5
[1,]
[2,]
[,1] [,2] [,3]
11
33
55
22
44
66
## membro à membro
> m5 - m4
[1,]
[2,]
[,1] [,2] [,3]
9
27
45
18
36
54
## membro à membro
> dim(t(m4))
[1] 3 2
> dim(m5)
[1] 2 3
> (m6 <- t(m4) %*% m5)
[1,]
[2,]
[3,]
[,1] [,2] [,3]
50 110 170
110 250 390
170 390 610
> det(m6)
[1] -4.054396e-12
## perceba que aqui há um erro de arredondamento. Para contornar isso basta utilizar o seguinte comando:
> round(det(m6), digits = 1)
[1] 0
## Aqui obtemos o resultado esperado.
Sistema de equacoes lineares (Ax=b)
x + 3y - z = 10
5x - 2y + z = 15
2x + y - z = 7
> mat <- matrix(c(1, 5, 2, 3, -2, 1, -1, 1, -1),
+
nc = 3)
> mat
[1,]
[2,]
[3,]
[,1] [,2] [,3]
1
3
-1
5
-2
1
2
1
-1
> solve(mat)
[,1]
[,2]
[,3]
[1,] 0.07692308 0.15384615 0.07692308
[2,] 0.53846154 0.07692308 -0.46153846
[3,] 0.69230769 0.38461538 -1.30769231
## inversa da matriz
> vec <- c(10, 15, 7)
> vec
[1] 10 15
7
> solve(mat, vec)
[1] 3.615385 3.307692 3.538462
## Solução do sistema Ax=b
Resolva os seguintes exercı́cios:
1) Dadas as matrizes:

−3
4
−3

−1
B= 1
−1

3
5
−3 −5 
3
5


−2 −4
3
4 
−2 −3
2
A =  −1
1
2
C =  −1
1

−5
5 
−4
mostre que AB=BA = matriz nula , AC=A e CA=C
2) Um construtor tem contratos para construir 3 estilos de casa: moderno, mediterraneo e colonial. A quantidade
de material empregada em cada tipo de casa é dada pela tabela:
Estilo de casa
Moderno
Mediterrâneo
Colonial
Tabela 1: Estilos de casas
Ferro Madeira Vidro Tinta
5
20
16
7
7
18
12
9
6
25
8
5
Tijolo
17
21
13
a) Se ele vai contruir 5, 7 e 12 casas dos tipos moderno, mediterraneo e colonial, respectivamente, quantas
unidades de cada material serão empregadas?
b) Suponha agora que os preços por unidade de ferro, madeira, vidro, tinta e tijolo sejam, respectivamente,
15, 8, 5, 1 e 10 u.c.p. Qual é o preço unitário de cada tipo de casa?
c) Qual o custo total do material empregado?
3) Suponha que um corretor da Bolsa de valores faça um pedido para comprar ações na segunda-feira, como
segue:
400 quotas de ação A, 500 quotas da ação B e 600 quotas da ação C. As ações A, B e C custam por quota R$
500,00, R$ 400,00 e R$ 250,00, respectivamente.
a) Encontre o custo total de acoes, usando multipicacao de matrizes.
b) Qual serah o ganho ou a perda quando as acoes forem vendidas seis meses mais tarde se as acoes A, B
e C custam R$ 600,00, R$ 350,00 e R$ 300,00 por quota, respectivamente?
4) Encontre as soluções para o sistema de equações.
a)
3x + 5y
=2
2x
+z=3
5x + y - z = 0
b)
2x - y +3z = 11
4x - 3y +2z = 0
x+y+z=6
3x + y + z = 4
c)
3x + 5y + 12z - t = -3
1x + 1y + 4z - t = -6
0x + 2y + 2z + t = 6
5) Calcule a determinante de:

2
A= 3
4

0 −1
0
2 
−3
7
6) Dadas as matrizes
A=
B=
1
1
3
0
2
0
−1
1
Calcule:
a) det(A) + det(B)
b) det(A + B)
7) Dada a matriz calcule

2 1
A= 0 2
5 1
a) det(A)
b) inversa de A

−3
1 
4
8) Considere

−1
C =  −1
0

1
1 
1
0
3
1
a) Determine a inversa de C
b) Uma maneira de decodificar mensagens é por meio de multiplicação de matrizes. Associamos as letras
do alfabeto aos números, segundo a correspondencia abaixo
0
a
1
b
2
c
3
d
4
e
5
f
6
g
7
h
8
i
9
j
10
l
11
m
12
n
13
o
14
p
15
q
16
r
17
s
18
t
19
u
20
v
21
x
22
z
23
Se desejamos enviar a mensagem ”eles”, por exemplo, utilizamos a correspondência numérica, montamos a matriz
5
5
11
18
1
3
2
4
15
35
47
105
M=
Fazemos CM, onde C é uma inversı́vel, por exemplo,
C=
e enviamos
CM =
.
Quem recebe a mensagem codificada, decodifica-a utilizando multiplicacao pela inversa de C(matriz chave).
Voce recebe a mensagem codificada

16
CM =  12
14
Decodifique-a utilizando a matriz C do intem a).
35
52
36

2
51 
18
Download

Minicurso C