Marcelo (mcruas@gmail.com)
21/10/2013
LIBERAR SEU NERD INTERIOR
Critério | R | Matlab | Peso do critério |
---|---|---|---|
Funções de otimização | 0 | X | 1 |
Funções de estatística | X | 0 | 1 |
É grátis? | X | 0 | 1000 |
Resultado final | 1001 | 1 |
O R sabe somar
1+1 #euamomatemática
O R sabe fazer operações mais complexas
7*(6+827.3)
Strings devem ser usados entre “” para diferenciar de nome de variável
curso.de.r <- "I’ve got a very bad feeling about this!"
As expressões usuais, como \( + - * / ^ \) são todas implementadas no R
Não esquecer a precedência dos parênteses
Outras operações aritméticas:
18 %% 4 # o resultado é o resto da divisão
83.5 %/% 4 # o resultado é a parte inteira da divisão
Comparação de valores gera um resultado binário (TRUE ou FALSE)
3.141592653589 < pi
[1] TRUE
"RS" > "Brazil"
[1] TRUE
Igual ==
Menor <
Não x !x
x E y x&y
Diferente !=
Menor ou igual <=
x OU y x|y
O que acontece se utilizarmos operadores lógicos com números ou strings?
x <- -13
y <- 17
z <- sqrt(x + y) # sqrt() é a raiz quadrada do valor entre parêntesis
z
[1] 2
Uma função é chamada através de seu nome, seguida dos parâmetros entre parêntesis
sum(1,2,10,832)
[1] 845
Alguns argumentos possuem nomes
rep("Aaaaah le leki leki leki", times=5)
[1] "Aaaaah le leki leki leki" "Aaaaah le leki leki leki"
[3] "Aaaaah le leki leki leki" "Aaaaah le leki leki leki"
[5] "Aaaaah le leki leki leki"
Outras funções para testar:
exp(2)
help(max) # Ajuda sobre alguma função
example(matrix) # Dá exemplos sobre a utilização da função
Vetores são criados a partir da função c(), originado da expressão Combine
v <- c(1,2,3)
Um vetor pode conter valores numéricos, lógicos, etc.
c(TRUE,FALSE,FALSE,TRUE)
c("o que","eh isso","novinho","!")
O que acontece ao misturar diferentes tipos num vetor?
c(99,"baloes vermelhos",TRUE)
x <- c(49,42,40)
x
[1] 49 42 40
x + 10
[1] 59 52 50
x/2
[1] 24.5 21.0 20.0
Vetores podem ser somados diretamente: \[ x=\left[\begin{array}{c} 1\\ 2\\ 3 \end{array}\right]+\left[\begin{array}{c} 4\\ 5\\ 6 \end{array}\right] \]
x <- c(1,2,3) + c(4,5,6)
Cuidado com diferença de dimensões!
c(1,2,3,7,8,9) + c(4,5,6)
[1] 5 7 9 11 13 15
Vetor sequência
7:20
A função seq() permite incrementos diferentes de 1
seq(2,28,by=5)
Testando a igualdade entre vetores
y <- c(5,27,9)
x == y
[1] TRUE FALSE TRUE
Nota-se que o R não verifica se os vetores são iguais, mas sim se cada elemento é igual ou não.
Testando se os vetores são matematicamente iguais à moda Miguelão
sum((x-y)^2)
[1] 400
É possível comparar os valores de um vetor com alguma constante
x == 5
[1] TRUE FALSE FALSE
Como exercício, agora, calcule quais valores de sin(x) são menores do que zero
sin(x) < 0
obs: aplicar uma função cujo argumento seja um escalar num vetor faz com que ela seja aplicada em cada elemento do vetor
v <- c(1,2,3)
É possível nomear os elementos de um vetor
names(v) <- c("x","y","z")
v["y"]
Operações de \( +-/* \) para vetores funcionam termo a termo
Para fazer operações vetoriais, há operações próprias:
x <- c(49,42,40)
Para acessar o primeiro e último valores de \( x \)
x[1]
x[length(x)] # length(v) fornece o tamanho do vetor v
x[c(1,3)] # Acessa mais de um valor
x <- x[-2] # retira o segundo elemento do vetor
\[ vetorao=\begin{bmatrix}1\\ \vdots\\ 15\\ 0\\ \vdots\\ 0\\ 16\\ 17 \end{bmatrix} \]
A expressão
length(vetorao) == 1000
deve ser verdadeira.
vetorao <- c(1:15,rep(0,(1000-17)),16,17)
length(vetorao)
[1] 1000
mean(vetorao)
[1] 0.153
max(vetorao)
[1] 17
vetorao[vetorao == 0] <- 1
x <- c(1,1,1,0,1,1)
barplot(x)
Atualize o nome das variáveis e exiba o gráfico novamente
names(x) <- 2007:2012
barplot(x)
title("Título do gráfico")
Defina \( x \) como uma sequência \( 1,1.1,1.2,...,9.9,10 \). Após, defina \( y=sin(x) \) e exiba um gráfico através do comando plot(x,y)
x <- seq(1, 20, 0.1)
y <- sin(x)
plot(x,y)
Para criar uma matriz, pode-se utilizar a função matrix()
help(matrix)
matrix(1,3,7) # criando uma matriz com o valor 1, com 4 linhas e 7 colunas
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,] 1 1 1 1 1 1 1
[2,] 1 1 1 1 1 1 1
[3,] 1 1 1 1 1 1 1
Quando só há um elemento nos dados, ele é repetido por todos os elementos da matriz
v <- 1:10
matrix(v,3,7) # pode-se também criar a matriz com um vetor como seu argumento
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,] 1 4 7 10 3 6 9
[2,] 2 5 8 1 4 7 10
[3,] 3 6 9 2 5 8 1
Observe a diferença quando se coloca byrow=TRUE
matrix(v,3,7,byrow=TRUE)
Outra forma de criar uma matriz a partir de um vetor é ajustando suas dimensões explicitamente
dim(v) <- c(3,4) # Essa expressão dará erro. Interprete o erro e faça alguma mudança para criar uma matriz a partir dos elementos de v.
dim(v) <- c(2,5)
Pode-se montar uma matriz a partir de vetores
cbind(c(1,2,3),c(4,5,6))
[,1] [,2]
[1,] 1 4
[2,] 2 5
[3,] 3 6
Qual a diferença entre utilizar a função cbind() e rbind()?
rbind(c(1,2,3),c(4,5,6))
A + B # soma de matrizes
A * B # produto dos elementos das matrizes
A %*% B # multiplicação de matrizes
crossprod(A,B) # equivalente a t(A) %*% B
crossprod(A) # equivalente a t(A) %*% A
A %*% v
A * v
Resolvendo um sistema linear da forma \( Ax=b \)
x <- solve(A,b)
Usando a função solve() com apenas uma matriz como argumento retornará \( A^{-1} \)
A.inv <- solve(A)
det(A) # calcula a determinante
diag(v,3) # cria uma matriz 3x3 com os elementos de v na diagonal principal
diag(A) # retira os elementos da diagonal principal da matriz A
Crie uma matriz qualquer, com dimensões maiores que 3 e com valores distintos
A <- matrix(v, n.colunas, n.linhas)
A[1, 2] # exibe o segundo elemento da primeira linha
A[, 1] # o que faz esse comando?
A[3, ] # e esse?
No lugar dos índices, pode-se usar variáveis para indicar qual linha e coluna se está acessando.
coluna <- 4
linha <- 4
A[linha,coluna]
E para várias (mas não todas colunas), como fazer a consulta?
A <- matrix(1,5,5)
A[1,3] <- 0
A[2,4] <- 0
A[2,1] <- 3
contour(A)
Ou em 3D! :D
persp(A)
Bom, às vezes o resultado não é dos melhores…
O R possui algumas bases de dados já disponíveis para testes
contour(volcano) # exibe as curvas de nível do vulcão
image(volcano) # exibe um gráfico de calor
O R possui algumas bases de dados já disponíveis para testes
contour(volcano)
De onde é esse vulcão?
É um outro tipo de dado, composto por uma lista de vetores de mesmo tamanho
nomes <- c("Heliveuton", "Micajequisson","Marcelo")
salario <- c(7000,50000,1500)
idade <- c(17,21,18)
individuos <- data.frame(nomes,salario,idade)
individuos
nomes salario idade
1 Heliveuton 7000 17
2 Micajequisson 50000 21
3 Marcelo 1500 18
order(individuos$salario) # mostra qual o índice do menor valor, depois do segundo menor, etc.
[1] 3 1 2
Como exibir os individuos por ordem crescente de salário?
individuos[order(individuos$salario), ]
nomes salario idade
3 Marcelo 1500 18
1 Heliveuton 7000 17
2 Micajequisson 50000 21
dados <- read.csv(file=nome.do.arquivo, header=TRUE) # carrega os dados em toneladas de CO2 emitido per capita. Para nome.do.arquivo, coloque o nome dele entre ""
O R pode ler também base de dados de STATA, SPSS, etc. Para isso, basta carregar o pacote foreign
library(foreign)
wages <- read.dta(file="wages.dta")
Para escrever de volta num arquivo
write.csv(A, file = "saida.csv", row.names = FALSE)
Após abrir as bases de dados, é preciso saber qual sua estrutura. O R fornece algumas funções para isso
str(dados)
summary(dados)
head(dados)
Há varios outros pacotes que podem ser baixados para análise semelhante. Abra a aba de pacotes e instale o pacote psych
describe(dados)
Muitas vezes, precisamos juntar dados de diferentes tabelas. Para isso, utiliza-se a função merge()
?merge
Experimente com os arquivos disponíveis baixados anteriormente
… complete your training is not!