Intro R
Intro R
CEDE - UFMG
Dezembro – 2016
1
Conteúdo
• Módulo I: Introdução
• Módulo V: Funções
2
Módulo I: Conceitos Básicos
3
Introdução
4
Baixando e Instalando o R.
5
Pacotes, manual e demonstrações
6
Pacotes, manual e demonstrações
6
Pacotes, manual e demonstrações
Pacotes!
6
Pacotes
Pacotes
Uma coleção de funções que podem ser escritas em R, C++, Fortran e C e
que são chamadas diretamente de dentro do R.
7
Pacotes
8
Exemplos de pacotes
Alguns pacotes
9
Instalando pacotes
> [Link]('ggplot2')
10
Carregando pacotes
• Uma vez que o pacote foi instalado não há mais a necessidade de instalar
sempre que for utilizar as suas funcionalidades, basta carregar o pacote
com os comandos: library() ou require().
> library(cluster) # ou
> require(cluster)
11
Help?
> [Link]("[Link]")
12
Help?
> apropos("lm")
> ??lm #??: procurar em todos os pacotes instalados no R
> demo(graphics)
> demo(persp)
> demo(Hershey)
> demo(plotmath)
13
Linguagem compilada vs interpretada
Compilada ou interpretada?
14
Linguagem compilada vs interpretada
Compilada ou interpretada?
14
Linguagem compilada vs interpretada
Compilada ou interpretada?
14
Linguagem compilada vs interpretada
Compilada ou interpretada?
14
Linguagem compilada vs interpretada
Compilada ou interpretada?
14
Ambiente R
15
Interface R
16
IDE Rstudio
17
IDE Rstudio
18
Outras IDE’s
IDE’s para o R
19
Outras IDE’s
IDE’s para o R
19
Manipulação simples no prompt
> 2 + 3
> 1 - 8
> 4 * 5
> 3 / 5
> 2 ^ 3
( 20+7 )2
Use os parênteses para calcular expressões, por exemplo, 3
.
20
Manipulação simples no prompt
> 18 / 3
[1] 6
> 25 *
+
+ 5
[1] 125
21
Criando objetos/variáveis
> objeto1
[1] 27
> print(objeto1)
[1] 27
22
Case-sensitive
23
Comentários
> 4*2
[1] 8
24
Agora é a sua vez
25
Criando um objeto
Volume de um tubo
Seja um tubo com raio de 10 cm, com 1,5 metros de comprimento e com uma
espessura de 1 cm. Qual o volume deste cubo?
26
Criando um objeto
Volume de um tubo
Seja um tubo com raio de 10 cm, com 1,5 metros de comprimento e com uma
espessura de 1 cm. Qual o volume deste cubo?
Dica
π = 3.14
26
Criando um objeto
Volume de um tubo
Seja um tubo com raio de 10 cm, com 70 cm de comprimento e com uma
espessura de 1 cm. Qual o volume deste cubo?
27
Criando um objeto
Volume de um tubo
Seja um tubo com raio de 10 cm, com 70 cm de comprimento e com uma
espessura de 1 cm. Qual o volume deste cubo?
27
Criando um objeto
Volume de um tubo
Seja um tubo com raio de 10 cm, com 70 cm de comprimento e com uma
espessura de 1 cm. Qual o volume deste cubo?
27
Criando um objeto
Volume de um tubo
Seja um tubo com raio de 10 cm, com 70 cm de comprimento e com uma
espessura de 1 cm. Qual o volume deste cubo?
27
Constantes armazenadas no R
> pi
[1] 3.141593
> letters
[1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s" "t"
[21] "u" "v" "w" "x" "y" "z"
> LETTERS
[1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P" "Q" "R" "S" "T"
[21] "U" "V" "W" "X" "Y" "Z"
> [Link]
[1] "Jan" "Feb" "Mar" "Apr" "May" "Jun" "Jul" "Aug" "Sep" "Oct" "Nov" "Dec"
> [Link]
[1] "January" "February" "March" "April" "May" "June"
[7] "July" "August" "September" "October" "November" "December"
> Inf
[1] Inf
28
Operadores lógicos
29
Operadores lógicos
Operadores lógicos: são operados binários para realização de testes entre duas
variáveis (objetos). Estas operações retornam o valor TRUE (1) ou FALSE (0).
Operadores Descrição
< Menor que
<= Menor ou igual a
> Maior que
>= Maior ou igual a
== Igual a
!= Diferente de
!x Não x
x | y x OU y
x & y xEy
Table 1: Tabela de operadores lógicos.
30
Usando os operadores lógicos
Exemplos:
> x <- 10 #atribuindo o valor 10 ao objeto x
> y <- 20 #atribuindo o valor 20 ao objeto y
> x < y #x é menor que y?
> x < x #x é menor que x?
> x <= x #x é menor igual que x?
> x > y #x é maior que x?
> x >= y #x é maior igual que x?
> x == y #x é igual a y?
> x != y #x é diferente de y?
Dica
Note que há um espaço em branco entre os operadores lógicos. Estes espaços
não são obrigatórios, porém tornam o código mais legível.
31
Agora é a sua vez
32
Agora é a sua vez
33
Agora é a sua vez
33
Agora é a sua vez
Assimilando
33
Classes de objetos
34
Classes de objetos
Classes
35
Classe: numeric()
> y <- 10
> class(y)
[1] "numeric"
> ?class()
> ?numeric()
> ?integer()
37
Classe: logical()
38
Classe: character()
39
Classe: character()
40
Classes de objetos
> [Link](3.14)
[1] FALSE
> [Link]("5.45")
[1] 5
> [Link]("Brasil")
[1] FALSE
> [Link](TRUE)
[1] 1
41
Agora é a sua vez
42
Agora é a sua vez
43
Agora é a sua vez
43
Módulo II: Estrutura de dados
44
Estrutura de dados
> dados
id fabricante espessura comprimento
1 0001 XYZ 1.000 80.001
2 0002 ABC 0.988 79.999
3 0003 KML 1.001 81.001
45
Estrutura de dados
46
Vetores
> ?c()
> length([Link])
[1] 4
48
Vetores: atributos
49
Combinando vetores
50
Criando vetores longos
> seq(from = 10, to = 110, by = 10) #lembra do vet3 <- c(vet1, vet2) ?
[1] 10 20 30 40 50 60 70 80 90 100 110
52
Agora é a sua vez
53
Agora é a sua vez
• Experimente digitar no R:
• x <- 1:5; y <- c(2:4, 1, 2)
• x == seq(1, 5, by = 1)
• x < y
54
Agora é a sua vez
• Experimente digitar no R:
• x <- 1:5; y <- c(2:4, 1, 2)
• x == seq(1, 5, by = 1)
• x < y
O que aconteceu?
54
Operações com vetores
55
Operações com vetores
56
Acessando elementos do vetor
vetor[INDICE]
• Por exemplo, para acessar o índice (posição) 4 do vetor x, basta fazer x[4]
> x <- 10:1
> x[4]
[1] 7
vetor[-INDICE]
> x[-4]
[1] 10 9 8 6 5 4 3 2 1
57
Acessando elementos do vetor
> length(novo_x)
[1] 9
58
Acessando elementos do vetor
> idade <- c(34, 27, 20, 28, 32, 43, 31, 18, 45, 36)
> idade > 35
[1] FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE TRUE TRUE
• Alguma sugestão?
59
Acessando elementos do vetor
> idade <- c(34, 27, 20, 28, 32, 43, 31, 18, 45, 36)
> idade > 35
[1] FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE TRUE TRUE
• Alguma sugestão?
59
Agora é a sua vez
60
Agora é a sua vez
Acessando vetores.
> altura <- c(150, 152, 145, 157, 167, 172, 175, 170, 165, 177, 162, 180, 160, 155, 147)
61
Agora é a sua vez
Acessando vetores.
> altura <- c(150, 152, 145, 157, 167, 172, 175, 170, 165, 177, 162, 180, 160, 155, 147)
> altura <- c(150, 152, 145, 157, 167, 172, 175, 170, 165, 177, 162, 180, 160, 155, 147)
> menor160 <- altura[altura <= 160]
> entre160e170 <- altura[altura > 160 & altura <= 170]
> maior170 <- altura[altura > 170]
>
> #removendo 180
> altura[altura != 180]
[1] 150 152 145 157 167 172 175 170 165 177 162 160 155 147
61
Vetores: funções
• mean(x): média
• sd(x): desvio padrão
• min(x): mínimo
• max(x): máximo
• range(x): vetor com mínimo e máximo
• sum(x): soma todos os elementos
• exp(x): exponencia todos os elementos
• sqrt(x): raiz quadrada
• log(x): logarítmo natural
62
Matrizes
• matriz: é uma coleção de vetores lado a lado, em que cada vetor tem
exatamente o mesmo comprimento e são da mesma classe. Cada linha ou
coluna de uma matriz individualmente será um vetor.
• Exemplo de uma matriz com 2 linhas e 3 colunas:
[ ]
2 4 3
A=
1 5 7
63
Matrizes
• matriz: é uma coleção de vetores lado a lado, em que cada vetor tem
exatamente o mesmo comprimento e são da mesma classe. Cada linha ou
coluna de uma matriz individualmente será um vetor.
• Exemplo de uma matriz com 2 linhas e 3 colunas:
[ ]
2 4 3
A=
1 5 7
63
Acessando elementos de uma matriz
64
Matriz: atributos
• As matrizes também possuem seus atributos: nomes das linhas, nomes das
colunas, número de linha e colunas.
• rownames(): atribui e acessa os nomes das linhas
• colnames(): atribui e acessa os nomes das colunas
• nrow(): retorna o número de linhas da matriz
• ncol(): retorna o número de colunas da matriz
• dim(): retorna o número de linhas e colunas da matriz
> dim(A)
[1] 2 3
> nrow(A)
[1] 2
> ncol(A)
[1] 3
66
Combinando matrizes
> final_de_semana
Sábado Domingo
[1,] 30 21
[2,] 28 21
[3,] 25 20
[4,] 24 30
[5,] 20 26
68
Acessando matrizes: rownames() e colnames()
69
Agora é a sua vez
70
Agora é a sua vez
Acessando matrizes
• Dica: colMeans()
> sd(mes['Semana3', ])
[1] 3.735289
> colMeans(mes)
Segunda Terça Quarta Quinta Sexta Sábado Domingo
26.4 25.2 26.6 24.4 27.8 25.4 23.6
71
Matrizes: funções
72
Listas: list()
[[2]]
[1] "a" "b" "c" "d" "e"
[[3]]
[1] TRUE FALSE TRUE FALSE FALSE
[[4]]
[1] 10
73
Acessando elementos de uma lista
> x[2]
[[1]]
[1] "a" "b" "c" "d" "e"
> class(x[2])
[1] "list"
> x[[2]]
[1] "a" "b" "c" "d" "e"
> class(x[[2]])
[1] "character"
74
Acessando elementos de uma lista
> car
[1] "a" "b" "c" "d" "e"
• Note que o vetor car foi apenas utilizado para construir a lista x, com isso
ao alterar x, não estamos alterando os valores de car.
75
Nomes de membros de listas
> compras <- list(pc = c("notebook", "desktop"), ano = c(1998, 2005, 200
> compras
$pc
[1] "notebook" "desktop"
$ano
[1] 1998 2005 2008 2012
> compras$pc
[1] "notebook" "desktop"
76
Outras formas de acessar uma lista
> compras[["pc"]]
[1] "notebook" "desktop"
[[2]]
[1] TRUE FALSE TRUE FALSE FALSE
77
Outras formas de acessar uma lista
> names(x)
NULL
$caractere
[1] "WW" "b" "c" "d" "e"
78
Data frames: [Link]()
79
Acessando [Link]
80
Acessando [Link]
81
[Link]: funções
82
[Link]: funções
> head(df)
nomes idade sexo
1 Joao 30 M
2 Lara 43 F
3 Manoel 21 M
4 Pedro 34 M
5 Denise 25 M
> str(df)
'[Link]': 5 obs. of 3 variables:
$ nomes: chr "Joao" "Lara" "Manoel" "Pedro" ...
$ idade: num 30 43 21 34 25
$ sexo : chr "M" "F" "M" "M" ...
> summary(df)
nomes idade sexo
Length:5 Min. :21.0 Length:5
Class :character 1st Qu.:25.0 Class :character
Mode :character Median :30.0 Mode :character
Mean :30.6
3rd Qu.:34.0
Max. :43.0
83
Agora é a sua vez
84
Agora é a sua vez
85
Módulo III: Loops e condições
86
Loops: for()
Estrutura do for
for(var in seq) {
tarefa que depende de var
...
}
• A ideia é que o valor do objeto var vai variar de acordo com vetor seq.
Por exemplo:
> for(i in 1:3) {
+ print(i)
+ }
[1] 1
[1] 2
[1] 3
87
Loops: for()
88
Loops: while
• Sintaxe:
Estrutura do while
while(VERDADEIRO) {
executa a tarefa
...
}
• Exemplo:
89
Loops: repeat
• Sintaxe:
Estrutura do repeat
repeat {
executa a tarefa
...
}
• Exemplo:
> x <- 1
> repeat {
+ print(x)
+ x = x+1
+ if (x == 6){
+ break
+ }
+ }
90
Condições
Estrutura do if()
if(condicao) {
executa ESTA tarefa se a condicao for verdadeira
} else {
caso contrário execute este OUTRA tarefa
}
• Exemplo:
> for(i in 1:10) {
+ if(i > 7) {
+ print(i)
+ }
+ }
[1] 8
[1] 9
[1] 10 91
Condições
92
Módulo IV: Lendo dados de arquivos
no formato texto
93
Lendo arquivo texto
> args([Link])
function (file, header = FALSE, sep = "", quote = "\"'", dec = ".",
numerals = c("[Link]", "[Link]", "[Link]"), [Link],
[Link], [Link] = !stringsAsFactors, [Link] = "NA",
colClasses = NA, nrows = -1, skip = 0, [Link] = TRUE,
fill = ![Link], [Link] = FALSE, [Link] = TRUE,
[Link] = "#", allowEscapes = FALSE, flush = FALSE,
stringsAsFactors = [Link](), fileEncoding = "",
encoding = "unknown", text, skipNul = FALSE)
NULL
> ?[Link]()
94
Lendo arquivo texto
• Ler um banco de dados com colunas separadas por vírgulas e ponto como
separador decimal.
95
Agora é a sua vez
96
Agora é a sua vez
97
Diferentes caracteres representando missing
98
Exportando arquivos de texto
99
Casos particulares da função [Link]()
100
Importando planilha do Excel
> #[Link](readxl)
> library(readxl)
> dados_excel <- read_excel(path = 'data/[Link]', sheet = 1)
> ?read_excel
101
Módulo V: Funções
102
Definições básicas
103
Para que serve uma função?
• Outro ponto positivo é que dada uma alteração na função não é necessário
alterar o código em diversos pontos
104
Estrutura de uma função
105
Componentes de uma função
106
Componentes de uma função
> formals(produto)
$x
$n
> body(produto)
{
resultado <- n * x
return(resultado)
}
> environment(produto)
<environment: R_GlobalEnv>
107
Ambiente global, pacotes e funções primitivas
108
Exemplo
109
Exemplo
> divisores(x = 4)
$div
[1] 2
$par_impar
[1] "Par"
$par_impar
[1] "Par"
> environment(produto)
<environment: R_GlobalEnv>
110
Funções do R base
Funções do R-base
111
Variáveis locais e globais
Variáveis criadas dentro de uma função não são acessadas no ambiente global
> f1 <- function(a){
+ b <- 10
+ resultado <- b-a
+ return(resultado)
+ }
>
> f1(a = 8)
[1] 2
> b
Error in eval(expr, envir, enclos): object 'b' not found
112
Variáveis locais e globais
113
Variáveis locais e globais
[1] 2
113
Variáveis locais e globais
[1] 2
Uma variável não definida mas utilizada dentro de uma função é procurada no
ambiente global!!!
113
Variáveis locais e globais
> val
[1] 20
114
Agora é a sua vez
115
Criando uma função
116
Solução
117
Solução
$soma
[1] 25
$elemento
[1] 9
$soma
[1] 196
$elemento
[1] 11
118
Operadores
119
Operadores
Operadores também são funções, porém podem ser utilizadas de duas formas
diferentes:
> 2 + 2*(8/4)
[1] 6
> 3 > 4
[1] FALSE
> '>'(3, 4)
[1] FALSE
120
Operadores
> '['(x, 3)
[1] "c"
121
Criando operadores
Para criar um operador basta criar uma função entre percentuais ‘%funcao%’
> '%soma_mult%' <- function(x, y){
+ z <- x + y
+ result <- x*z
+ return(result)
+ }
>
> 4 %soma_mult% 6
[1] 40
> 10 %soma_mult% 2
[1] 120
122
Tipos de inputs
123
Listas e funções
124
Argumentos default
125
Argumentos default
126
Argumentos default
> raiz(pNum = 4)
[1] 2
127
O argumento ‘…’
Desta forma o código fica mais enxuto e mais flexível para o usuário.
128
Tipos de outputs
129
Tipos de outputs
130
Tipos de outputs
$lista
$lista$ncol
[1] 4
$lista$nrow
[1] 1
$funcao
function (ncol, nrow)
{
ncol * nrow
}
<environment: 0x444fe80>
131
Mensagens de erro
132
A função warning()
Uso:
133
A função warning()
134
A função stop()
A função stop pode ser utilizada para tornar suas funções mais robustas e
trazer mais informações aos usuários. O objetivo desta função é parar o
processo dado algum evento e retornar uma mensagem de informação.
Exemplo:
> nchar_function <- function(char){
+ if(){
+ stop("O input deve ser um caracter")
+ }
+ return(nchar(char))
+ }
>
> nchar_function(char = "VSB")
[1] 3
135
Criando um log de erros
Em alguns problemas práticos erros são esperados, pois, nem sempre é possível
prever todos as possibilidades de erros. Neste caso salvar um arquivo contendo
os erros e warnings obtidos é muito útil e interessante. Podemos configurar o R
para salvar um log de erros:
> funcao_erro <- function() {
+ cat(geterrmessage(), file = "../data/[Link]",
+ append = T)
+ }
>
> options("error" = funcao_erro)
>
> 1 + "2"
Error in 1 + "2": non-numeric argument to binary operator
136
Agora é a sua vez
137
Criando uma função um pouco mais complexa
138
Solução
139
Solução
$soma
[1] 6 15 24
140
Documentação de funções
141
Documentação de funções
Para entender uma função, seus argumentos e seus outputs pode-se consultar a
documentação das funções.
142