SlideShare uma empresa Scribd logo
1 de 129
Baixar para ler offline
R
Introdução
– Semana da Computação da UFJF –
Leonardo Goliatt
Depto Mecânica Aplicada e Computacional
UFJF
leonardo.goliatt@ufjf.edu.br
2012 Outubro/16
http://bit.ly/WiheUu
1 / 110
Programa
Informações Preliminares
Linguagem R
Análise de Casos
Interface com Outras Linguagens
2 / 110
Conteúdo
Informações Preliminares
Sobre o R
Interface R
Linguagem R
Informações Preliminares
Sintaxe do R
Símbolos
Vetores
Instruções de Controle
Funções
Operadores
Estruturas de dados
Objetos e Classes
Gráficos
Pacotes e Dados do R
Análise de Casos
Ajuste de Curvas
Vazão da Represa de Furnas
Análise de Adubação da Soja
Computação Simbólica no R
Interface com Outras Linguagens
R e outras Linguagens de Programação
Combinando R com C e Fortran
3 / 110
Conteúdo
Informações Preliminares
Sobre o R
Interface R
4 / 110
O R e sua filosofia de trabalho
R pode ser definido como um ambiente de programação com
ferramentas para
manipulação de dados
cálculos
e apresentação gráfica
Como ambiente, entende-se um sistema coerente e totalmente
planejado
O R não é um software do tipo aplicativo
a preocupação não é com amigabilidade, mas com
flexibilidade
capacidade de manipulação de dados
realização de análises
4 / 110
Sobre o R
R é free
R é open-source
Qualquer pessoa tem liberdade para usar e modficar
Quem usa R?
Google
Pfizer
Merck
Bank of America
R possui mas de 1600 pacotes, entre eles:
BiodiversityR (ecologia e meio ambiente)
Emu (análise da fala)
GenABEL (genoma humano)
...
Deu no New York Times: http://nyti.ms/Wl12E4
5 / 110
O que é o R?
R é um programa para análise estatística e representação gráfica.
Funções e resultados de análises são armazenados como objetos,
permitindo:
fácil modificação de funções
construção de modelos
R é flexível e personalizável
Ideal para análise exploratória de dados
Por outro lado,
R é pouco eficiente para manipular grandes conjuntos de dados
Pouco eficiente na execução de grandes laços (loops) quando
comparado com outras linguagens com C, Fortran e C++
6 / 110
Objetivos do minicurso
Apresentar o ambiente de programação R contexto de simulação e
análise de dados
Fornecer exemplos claros e simples da funcionalidade e flexibilidade
do R
Estimular o aproveitamento do Software Livre, evitando as restrições
de softwares comerciais e o uso não autorizado destes.
7 / 110
Página Oficial do R
Referência básica para usuários de R: http://www.r-project.org/
inclui programas para download
listas de discussão
documentação e ajuda
Livros:
R in a Nutshell
The Art of R Programming
Onde baixar (Linux, Windows, Mac):
http://cran.fiocruz.br/
Ubuntu (Linux): sudo apt-get install r-base
8 / 110
Conteúdo
Informações Preliminares
Sobre o R
Interface R
9 / 110
Como usar o R?
Diretamente do terminal ou console (tela preta)
Linux: konsole, xterm, gnome-terminal
Usando interfaces gráficas
Rstudio: http://rstudio.org/
Rkward: http://rkward.sourceforge.net/
Rcmdr: http://www.rcommander.com/
StatET: http://www.walware.de/goto/statet/
Outras interfaces: http://www.sciviews.org/_rgui/
9 / 110
Invocando o R na linha de comando
Se estiver corretamente instalado, abra um terminal e digite R.
O símbolo “>” indica que o R está esperando um comando
1> R version 2.13.1 (2011-07-08)
2> Copyright (C) 2011 The R Foundation for Statistical Computing
3> ISBN 3-900051-07-0
4> Platform: x86_64-pc-linux-gnu (64-bit)
5>
6> R é um software livre e vem sem GARANTIA ALGUMA.
7> Você pode redistribuí-lo sob certas circunstâncias.
8> Digite 'license()' ou 'licence()' para detalhes de distribuição.
9>
10> R é um projeto colaborativo com muitos contribuidores.
11> Digite 'contributors()' para obter mais informações e
12> 'citation()' para saber como citar o R em publicações.
13>
14> Digite 'demo()' para demonstrações, 'help()' para o sistema
15> de ajuda, ou 'help.start()' a ajuda em HTML no seu navegador.
16> Digite 'q()' para sair do R.
10 / 110
Invocando o R na linha de comando
Ajuda sobre algo sobre o que se deseja
1> apropos('help') # busca por comandos similares
2> [1] "help" "help.request" "help.search" "help.start"
3> apropos('mean')
4> [1] "colMeans" "kmeans" "mean"
5> [5] "mean.Date" "mean.default" "mean.difftime"
6> [9] "mean.POSIXlt" "rowMeans" "weighted.mean"
Quando só se sabe o que procurar
1> help('mean') # help em modo texto
2> ?mean # o mesmo que help('mean')
3> help('mean',help_type='html') # help em modo html
11 / 110
Invocando o R na linha de comando
Para sair do programa, digite
1> quit()
2> Save workspace image? [y/n/c]: n
12 / 110
Conteúdo
Linguagem R
Informações Preliminares
Sintaxe do R
Símbolos
Vetores
Instruções de Controle
Funções
Operadores
Estruturas de dados
Objetos e Classes
Gráficos
Pacotes e Dados do R
13 / 110
Informações Preliminares
Funcionamento básico:
entre com uma expressão no console e digite <enter>
a expressão é avaliada e o resultado impresso na tela
Note que [1] sempre acompanha qualquer resultado
1 # Isto éum comentário
2 1 + 2 + 3
3 [1] 6
4 1 + 2 * 3 # outro comentário
5 [1] 7
6 (1 + 2) * 3 # ...
7 [1] 9
13 / 110
Informações Preliminares
R é case-sensitive: então A e a são símbolos diferentes e se referem
a diferentes variáveis
Comandos são separados por ponto e vírgula “;”
O conjunto de símbolos dependem do idioma e do sistema
operacional onde se roda o R (tecnicamente, o locale em uso)
Todos os símbolos alfanuméricos são permitidos, incluindo “.” e “_”
Comentários começam com “#”
1 #
2 A=2; a=banana
3 print(A)
4 [1] 2
5 print(a)
6 [1] banana
7 #
8 .num=45; print(.num+1)
9 [1] 46
14 / 110
Informações Preliminares
Como a maioria das linguagens de programação, R permite atribuir
valores a variáveis
A operação de atribuição tem a sintaxe objeto recebe valor
Há dois operadores que atribuem valores a um objeto dessa maneira
sinal de menor seguido de hífen: -
sinal de igual: =
1 # Os dois operadores de atribuição - e = são equivalentes
2 a - 2
3 f - b = 5*a
4 print(a)
5 [1] 2
6 print(b)
7 [1] 10
8 print(f)
9 [1] 10
15 / 110
Informações Preliminares
Uma forma de atribuição menos usada é valor atribuído a objeto
1 # Outra forma, menos usual é
2 salsa -d -e
3 print(d)
4 [1] salsa
5 print(e)
6 [1] salsa
7
8 # Para saber mais
9 ?=
10 ?-
16 / 110
Informações Preliminares
Em R, todo resultado é interpretado como um vetor
O “[1]” indica o índice do vetor
No caso abaixo, os números entre colchetes indicam o índice do
primeiro elemento de cada linha
1 # sequência de inteiros no intervalo [1,50]
2 1:50
3 [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
4 [23] 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
5 [42] 42 43 44 45 46 47 48 49 50
17 / 110
Informações Preliminares
1 # Usando o R como calculadora
2 4+6
3 [1] 10
4 2+3*4
5 [1] 14
6 3/2+1
7 [1] 2.6
8 4*3**3 # potências são indicadas por ** ou ^
9 [1] 108
10
11 # Outras funções
12 sqrt(2)
13 [1] 1.414214
14 sin(pi) # os ângulos são interpretados em radianos
15 [1] 1.224606e-16 # zero!
16 sqrt(sin(45*pi/180))
17 [1] 0.8408964
18 log(1) # logaritmo neperiano (base e)
19 [1] 0
20 log(64,4) # base 4
21 [1] 3
18 / 110
Conteúdo
Linguagem R
Informações Preliminares
Sintaxe do R
Símbolos
Vetores
Instruções de Controle
Funções
Operadores
Estruturas de dados
Objetos e Classes
Gráficos
Pacotes e Dados do R
19 / 110
Sintaxe do R
Vamos começar com uma visão geral do R
È possível escrever quase qualquer expressão em R como uma
função
Porém, isso pode se tornar confuso e o R permite algumas sintaxes
especiais
A sintaxe básica envolve:
Constantes
números
caracteres
símbolos.
Símbolos
Operadores
Operadores básicos e definidos pelo usuário
Atribuição
19 / 110
Sintaxe do R
Vetores numéricos
1 # Números são interpretados literalmente
2 1.1
3 [1] 1.1
4 2^1023
5 [1] 8.988466e+307
6
7 # Valores em notação hexadecimal comecam com 0x
8 0x1
9 [1] 1
10 0xFFFF
11 [1] 65535
12
13 # Qualquer número éinterpretado como ponto flutuante de dupla precisão
14 typeof(1)
15 [1] double
16 ?typeof # mais sobre a função typeof()
17 typeof(as(1,integer)) # se deseja um inteiro, use a função as
18 [1] integer
20 / 110
Sintaxe do R
Vetores numéricos
1 # Limites de precisão
2 (2^1023 + 1) == 2^1023 # 2^1023 éo máximo de precisão
3 [1] TRUE
4 # Limites de tamanho
5 2^1024
6 [1] Inf # o universo so existe até 2^1023
7
8 # R suporta complexos, escritos como (real) + (imaginário)i
9 0+1i ^ 2
10 [1] -1+0i
11 sqrt(-1+0i)
12 [1] 0+1i
13 exp(0+1i * pi)
14 [1] -1+0i
15
16 # A função sqrt() retorna um valor do mesmo tipo de entrada
17 sqrt(-1)
18 [1] NaN
19 Warning message:
20 In sqrt(-1) : NaNs produced
21 / 110
Sintaxe do R
Vetores numéricos
1 # O operador a:b retorna uma sequência de inteiros no intervalo [a,b]
2 1:5
3 [1] 1 2 3 4 5
4 typeof(1:5)
5 [1] integer
6
7 # Para combinar um conjunto de números em um vetor, use a função c()
8 v - c(173,12,1.12312,-93)
9 print(v)
10 [1] 173.00000 12.00000 1.12312 -93.0000000
11
12 # Em R, c se refere a função primitiva c(), porém você pode redefinitr c
13 c - 3
14 c
15 [1] 3
16 # mesmo após redefinir c, você pode combinar números
17 v - c(3,2,1)
18 v
19 [1] 3 2 1
22 / 110
Sintaxe do R
Caracteres
1 # Um caracter contém texto entre duas aspas
2 y - abc
3 y
4 [1] abc
5 length(y) # tamanho de y
6 [1] 1
7 mode(y) # equivalente a typeof()
8 [1] character
9
10 # Um vetor de caracteres
11 z - c(abc,29 88)
12 length(z)
13 [1] 2
14 mode(z)
15 [1] character
23 / 110
Sintaxe do R
Caracteres
1 # Concatenação de caracteres ...
2 u - paste(abc,de,f) # concatena as strings
3 u
4 [1] abc de f
5 # ... e separação (split)
6 v - strsplit(u,.) # divide em função dos espaços
7 v
8 [[1]]
9 [1] abc de f
10
11 # Outra forma de concaternar ...
12 u - paste(abc,de,f,sep=.) # usa . como separador
13 u
14 [1] abc.de.f
15 # ... e separar
16 strsplit(u,)
17 [[1]]
18 [1] a b c . d e . f
24 / 110
Conteúdo
Linguagem R
Informações Preliminares
Sintaxe do R
Símbolos
Vetores
Instruções de Controle
Funções
Operadores
Estruturas de dados
Objetos e Classes
Gráficos
Pacotes e Dados do R
25 / 110
Símbolos
Um símbolo é um objeto que se refere a outro objeto
1 # Símbolo éo nome da variável em R
2 x1 - 1
3 X1 - 2
4 x1
5 [1] 1
6 X1
7 [1] 2
8 x1.1 - 1
9 x1.1_1 - 1
10
11 # Se necessário (!?), defina um símbolo assim:
12 1+2=3 - hello
13 1+2=3
14 [1] hello
15
16 # Nem todas as palavras são símbolos (palavras reservadas)
17 # -- if, else, repeat, while, function, for, in, next, break
18 # -- TRUE, FALSE, NULL, Inf, NaN, NA
19 # -- ...
25 / 110
Símbolos
Funções
Uma função é uma outra forma de atribuir valor a um símbolo
1 # Atribui a função vetorial c(x+1, y+1) ao símbolo f
2 f - function(x,y) {c(x+1, y+1)}
3 f(1,2)
4 [1] 2 3
5 # Para visualizar o conteúdo de f
6 f
7 function(x,y) {c(x+1, y+1)}
8
9 # Visualizando o conteúdo da função desvio padrão
10 sd
11 function (x, na.rm = FALSE)
12 {
13 if (is.matrix(x))
14 apply(x, 2, sd, na.rm = na.rm)
15 else if (is.vector(x))
16 sqrt(var(x, na.rm = na.rm))
17 else if (is.data.frame(x))
18 sapply(x, sd, na.rm = na.rm)
19 else sqrt(var(as.vector(x), na.rm = na.rm))
20 }
26 / 110
Conteúdo
Linguagem R
Informações Preliminares
Sintaxe do R
Símbolos
Vetores
Instruções de Controle
Funções
Operadores
Estruturas de dados
Objetos e Classes
Gráficos
Pacotes e Dados do R
27 / 110
Vetores
Operações básicas
O comando c(), de “combinar” é a forma principal de criar vetores
1 # Criando objetos
2 x- c(1,2,3); print(x)
3 [1] 1 2 3
4 y- 5:9; print(y) # aqui temos uma sequência
5 [1] 5 6 7 8 9
6 z-c(x,y); print(z) # x e y são aglutinados em z
7 [1] 1 2 3 5 6 7 8 9
8
9 # Listando os elementos no espaço de trabalho
10 ls()
11 [1] x y z
12
13 # Apagando alguns deles
14 rm(x,y)
15
16 # Listando novamente
17 ls()
18 [1] z
19
20 rm(list=ls()) # apaga tudo
27 / 110
Vetores
Operações básicas
1 # soma de vetores
2 c(1,2,3) + c(1,1,1)
3 [1] 2 3 4
4 # se não têm o mesmo tamanho, a menor sequência érepetida
5 c(1, 2, 3, 4) + 1
6 [1] 2 3 4 5
7
8 # o mesmo vale para divisão
9 1 / c(1, 2, 3, 4, 5)
10 [1] 1.0000000 0.5000000 0.3333333 0.2500000 0.2000000
11
12 # no caso abaixo, a menor sequência tem tamanho 2
13 c(1, 2, 3, 4) + c(10, 100)
14 [1] 11 102 13 104
15
16 # a primeira sequência não émúltipla da segunda: 5 não émútiplo de 2
17 c(1, 2, 3, 4, 5) + c(10, 100)
18 [1] 11 102 13 104 15
19 Mensagens de aviso perdidas:
20 In c(1, 2, 3, 4, 5) + c(10, 100) :
21 comprimento do objeto maior não émúltiplo do comprimento do objeto menor
28 / 110
Vetores
Operações básicas
1 # Em R podemos entrar com expressões de caracteres
2 Hello world.
3 [1] Hello world.
4
5 # Um vetor de caracteres de comprimento 3
6 c(Hello world, Hello R interpreter)
7 [1] Hello world
8 Hello R interpreter
29 / 110
Vetores
Operações básicas
1 # Formas de acessar os membros de um vetor
2 b = c(1:10)
3 b
4 [1] 1 2 3 4 5 6 7 8 9 10
5 b[5] # acessa o 5o. elemento de b
6 [1] 5
7 b[2:7] # acessa uma fatia de b
8 [1] 2 3 4 5 6 7
9 b%%3 # resto da divisão por 3
10 [1] 1 2 0 1 2 0 1 2 0 1
11
12 # A operação abaixo retorna um vetor lógico
13 b%%3==0
14 [1] FALSE FALSE TRUE FALSE FALSE TRUE FALSE FALSE TRUE FALSE
15
16 # Elementos de b congruentes de 0 (mod 3)
17 b[b%%3==0]
18 [1] 3 6 9
19 #
20 b[c(2,6,9)]
21 [1] 2 6 9
30 / 110
Conteúdo
Linguagem R
Informações Preliminares
Sintaxe do R
Símbolos
Vetores
Instruções de Controle
Funções
Operadores
Estruturas de dados
Objetos e Classes
Gráficos
Pacotes e Dados do R
31 / 110
Instruções de Controle
As instruções de controle em R são muito similares àquelas de C,
C++, Perl e Python
Aqui vamos focar nos laços (loops) e condicionais (if-else)
1 # Python-like for: uma iteração para cada elemento
2 x - c(5,12,13)
3 for (n in x){
4 + y = x/10
5 + print(n^2+y)
6 + }
7 [1] 25.5
8 [1] 144.12
9 [1] 169.13
10
11 # O mesmo vale para listas
12 l=list(p=21,k=c(1,2,3),z=NaN, f=function(a){return(a^2)})
13 for(x in l) print(x)
14 [1] 21
15 [1] 1 2 3
16 [1] NaN
17 function(a){return(a^2)}
31 / 110
Instruções de Controle
1 # C-style while
2 i - 1
3 while (i = 10) i - i+4
4 i
5 [1] 13
6
7 # Funcionamento básico do if
8 if (r == 4) {
9 + x - 1
10 +} else {
11 + x - 3
12 + y - 4
13 +}
14
15 # Duas formas de representar a mesma operação
16 x - 1
17 y - if(x == 2) x else x+1
18 y
19 [1] 2
20 if(x == 2) y - x else y - x+1
21 y
22 [1] 2
32 / 110
Conteúdo
Linguagem R
Informações Preliminares
Sintaxe do R
Símbolos
Vetores
Instruções de Controle
Funções
Operadores
Estruturas de dados
Objetos e Classes
Gráficos
Pacotes e Dados do R
33 / 110
Funções
Em R, as operações que fazem todo o trabalho são chamadas
funções
1 # Funções com 1 argumento
2 exp(1)
3 [1] 2.718282
4 cos(3.141593)
5 [1] -1
6
7 # Alguns argumentos podem ser especificados pelo nome
8 log(x=64, base=4)
9 [1] 3
10
11 # O comando seq() possui vários argumento opcionais
12 seq(from=0,to=10,by=0.8) # intervalo
13 [1] 0.0 0.8 1.6 2.4 3.2 4.0 4.8 5.6 6.4 7.2 8.0 8.8 9.6
14 seq(from=0,to=10,length=20) # comprimento
15 [1] 0.0000000 0.5263158 1.0526316 1.5789474 2.1052632 2.6315789
16 [7] 3.1578947 3.6842105 4.2105263 4.7368421 5.2631579 5.7894737
17 [13] 6.3157895 6.8421053 7.3684211 7.8947368 8.4210526 8.9473684
18 [19] 9.4736842 10.000000
33 / 110
Funções
Nem todas as funções têm a forma f (x1,x2,....)
Algumas aparecem na forma de operadores
1 17 + 2
2 [1] 19
3 2 ^ 10
4 [1] 1024
5 3 == 4
6 [1] FALSE
34 / 110
Funções
Assim como em qualquer linguagem de programação, o cerne do R
consiste em escrever funções
Uma função é um grupo de instruções que recebe as entradas, opera
sobre elas e retorma uma saída
1 # Conta o número de números ímpares em um vetor de inteiros
2 oddcount - function(x)
3 + k - 0 # o + indica continuação de linha
4 + for (n in x) {
5 + if (n %% 2 == 1) k
6 + }
7 + return(k) # o função retorna alguma coisa
8 + }
9
10 oddcount(c(1,3,5))
11 [1] 3
12 oddcount(c(1,2,3,7,9))
13 [1] 4
35 / 110
Funções
Variáveis criadas fora da função são globais e visíveis pela função
1 f - function(x) return(x+y)
2 y - 3
3 f(5)
4 [1] 8
Entradas podem ter um valor default
1 f - function(x,y=10) return(x+y)
2 f(x=3)
3 [1] 13
4 f(x=3,y=3)
5 [1] 6
6 f(k=3)
7 Error in f(k = 3) : unused argument(s) (k = 3)
36 / 110
Conteúdo
Linguagem R
Informações Preliminares
Sintaxe do R
Símbolos
Vetores
Instruções de Controle
Funções
Operadores
Estruturas de dados
Objetos e Classes
Gráficos
Pacotes e Dados do R
37 / 110
Operadores
Operadores básicos
Um operador é uma função que toma um ou mais argumentos e
pode ser escrita sem parênteses
1 x - -1:5
2 x
3 [1] -1 0 1 2 3 4 5
4
5 # adição e multiplicação
6 2 * x + 3
7 [1] 1 3 5 7 9 11 13
8 # exponenciação
9 x^3
10 [1] -1 0 1 8 27 64 125
11
12 # resto da divisão (módulo)
13 x %% 2 #-- éperiódico
14 [1] 1 0 1 0 1 0 1
15
16 # divisão inteira
17 x %/% 5 # x %/% 5 == floor(x/5)
18 [1] -1 0 0 0 0 0 1
37 / 110
Operadores
Operadores definidos pelo usuário
1 # Você pode definir seus próprios operadores
2 # Vamos definir o operador %myop% através de uma função
3
4 %myop% - function(a, b) {2*a + b}
5 1 %myop% 1
6 [1] 3
7 1 %myop% 2
8 [1] 4
9
10 c(1,2,3,4,5) %myop% 2
11 [1] 4 6 8 10 12
12
13 # Atribuição éum operador
14 x - c(1,2,3,4,5)
15
16 # O negativo também éum operador
17 -7
18 [1] -7
19
20 # O ponto de interrogação ? (help) também éum operador
21 ??
38 / 110
Operadores
Atribuição
1 # As operações de atribuição atribuem um objeto a um símbolo
2
3 # Vetor atribuído a um símbolo
4 v - c(1,2,3,4,5,6,7,8)
5
6 # Objeto lista atribuída a um símbolo
7 y - list(sapato=mocassim, chapeu=gorro, camisa=polo)
8 y
9 $sapato
10 [1] mocassim
11
12 $chapeu
13 [1] gorro
14
15 $camisa
16 [1] polo
17
18 # Objeto função atribuído a um símbolo
19 z - function(a,b,c) {a ^ b / c}
20 z
21 function(a,b,c) {a ^ b / c}
39 / 110
Conteúdo
Linguagem R
Informações Preliminares
Sintaxe do R
Símbolos
Vetores
Instruções de Controle
Funções
Operadores
Estruturas de dados
Objetos e Classes
Gráficos
Pacotes e Dados do R
40 / 110
Introdução as estruturas de dados
Em R, podemos construir estruturas de dados mais complicadas do
que vetores
Alguns casos
arrays
listas
dataframes
...
40 / 110
Estruturas de dados
Arrays
1 # Um array éum vetor multidimensional
2 a - array(c(1,2,3,4,5,6,7,8,9,10,11,12),dim=c(3,4))
3 a
4 [,1] [,2] [,3] [,4]
5 [1,] 1 4 7 10
6 [2,] 2 5 8 11
7 [3,] 3 6 9 12
8 # Para acessar o elemento [2,2]
9 a[2,2]
10 [1] 5
11 # Veja como fica um vetor com o mesmo conteúdo
12 v - c(1,2,3,4,5,6,7,8,9,10,11,12); v
13 [1] 1 2 3 4 5 6 7 8 9 10 11 12
41 / 110
Estruturas de dados
Arrays
1 # Relembrando do array a, podemos acessá-lo de diferentes formas
2 a
3 [,1] [,2] [,3] [,4]
4 [1,] 1 4 7 10
5 [2,] 2 5 8 11
6 [3,] 3 6 9 12
7
8 # Somente a primeira linha
9 a[1,]
10 [1] 1 4 7 10
11 # Somente a primeira coluna
12 a[,1]
13 [1] 1 2 3
14
15 # Acessando uma fatia das linhas
16 a[1:2,]
17 [,1] [,2] [,3] [,4]
18 [1,] 1 4 7 10
19 [2,] 2 5 8 11
42 / 110
Estruturas de dados
Arrays
1 # Relembrando do array a mais uma vez
2 a
3 [,1] [,2] [,3] [,4]
4 [1,] 1 4 7 10
5 [2,] 2 5 8 11
6 [3,] 3 6 9 12
7
8 # Acessando um conjunto não contíguo colunas
9 a[,c(1,3)] # mostra somente as colunas 1 e 3
10 [,1] [,2]
11 [1,] 1 7
12 [2,] 2 8
13 [3,] 3 9
14
15 # O sinal negativo exclui linhas ou colunas
16 a[-c(1,3),] # exclui linhas 1 e 3
17 [1] 2 5 8 11
18 a[-2,-c(1,4)] # exclui linha 2 e colunas 1 e 4
19 [,1] [,2]
20 [1,] 4 7
21 [2,] 6 9
43 / 110
Estruturas de dados
Arrays
1 # Uma matriz éum array bidimensional
2 m - matrix(data=c(1,2,3,4,5,6,7,8,9,10,11,12),nrow=3,ncol=4)
3 m
4 [,1] [,2] [,3] [,4]
5 [1,] 1 4 7 10
6 [2,] 2 5 8 11
7 [3,] 3 6 9 12
8
9 # O comando matrix(() preenche as colunas com os dados fornecidos
10 matrix(1:6,nrow=2)
11 [,1] [,2] [,3]
12 [1,] 1 3 5
13 [2,] 2 4 6
14
15 # O preencimento por linhas também épossível
16 matrix(1:6,nrow=2, byrow=TRUE)
17 [,1] [,2] [,3]
18 [1,] 1 2 3
19 [2,] 4 5 6
44 / 110
Estruturas de dados
Arrays
1 # Uma outra forma de criar uma matriz éusando as funções
2 # -- rbind()
3 m - rbind(c(1,4),c(2,-3))
4 m
5 [,1] [,2]
6 [1,] 1 4
7 [2,] 2 -3
8
9 # -- cbind()
10 n - cbind(c(1,4),c(2,-3))
11 n
12 [,1] [,2]
13 [1,] 1 2
14 [2,] 4 -3
15
16 # --diag()
17 diag(2)
18 [,1] [,2]
19 [1,] 1 0
20 [2,] 0 1
45 / 110
Estruturas de dados
Arrays
1 # Além da soma e subtração, temos as operações
2 # -- multiplicação termo a termo
3 m * diag(2)*3
4 [,1] [,2]
5 [1,] 3 0
6 [2,] 0 -9
7
8 # -- divisão termo a termo
9 m/diag(2)
10 [,1] [,2]
11 [1,] 1 Inf
12 [2,] Inf -3
13
14 # -- produto matricial
15 m % * % n
16 [,1] [,2]
17 [1,] 17 -10
18 [2,] -10 13
46 / 110
Estruturas de dados
Arrays
Atenção!
1 # O R pode operar com arrays de diferentes tamanhos, por conta do reuso dos vetores!
2 x=matrix(1:6,ncol=2)
3 x
4 [,1] [,2]
5 [1,] 1 4
6 [2,] 2 5
7 [3,] 3 6
8
9 # Aparentemente, a operação não faria sentido
10 x+c(1,2)
11 [,1] [,2]
12 [1,] 2 6
13 [2,] 4 6
14 [3,] 4 8
15
16 # Vamos vamos fazer algumas considerações...
47 / 110
Estruturas de dados
Arrays
Atenção!
1 # Neste caso, ocorre a repetição dos valores, e a soma anterior éequivalente a
2 x + c(1,2,1,2,1,2)
3 [,1] [,2]
4 [1,] 2 6
5 [2,] 4 6
6 [3,] 4 8
7
8 # Observe a construção da matrix y, com c(1,2) repetido nas colunas
9 y=matrix(c(1,2,1,2,1,2),ncol=2)
10 y
11 [,1] [,2]
12 [1,] 1 2
13 [2,] 2 1
14 [3,] 1 2
15 x + y
16 [,1] [,2]
17 [1,] 2 6
18 [2,] 4 6
19 [3,] 4 8
48 / 110
Estruturas de dados
Arrays
1 # Arrays podem ter mais de uma dimensão
2 w - array(c(1:18),dim=c(3,3,2))
3 print(w)
4 , , 1
5
6 [,1] [,2] [,3]
7 [1,] 1 4 7
8 [2,] 2 5 8
9 [3,] 3 6 9
10
11 , , 2
12
13 [,1] [,2] [,3]
14 [1,] 10 13 16
15 [2,] 11 14 17
16 [3,] 12 15 18
17
18 # Acessando um dos elementos
19 w[1,1,1]
20 [1] 1
49 / 110
Estruturas de dados
Listas
Uma lista aceita a mistura de objetos de diferentes tipos
1 # Uma lista contendo um número e uma string
2 e - list(elemento=esfera, raio=8.25)
3 e
4 $elemento
5 [1] esfera
6
7 $raio
8 [1] 8.25
9
10 # Os objetos podem ser acessados de várias formas
11 e$elemento
12 [1] esfera
13 e[2]
14 $raio
15 [1] 8.25
16
17 e[[2]]
18 [1] 8.25
50 / 110
Estruturas de dados
Listas
1 # Uma lista pode referenciar outra lista
2 g - list(Essa lista referencia outra lista, e)
3 g
4 [[1]]
5 [1] Essa lista referencia outra lista
6
7 [[2]]
8 [[2]]$objeto
9 [1] esfera
10
11 [[2]]$raio
12 [1] 8.25
51 / 110
Estruturas de dados
Dataframes
Um dataframe é um objeto que contém múltiplos vetores que são do
mesmo tamanho
é semelhante a uma planilha ou base de dados
bons para representar dados experimentais
1 # As 6 cidades mais populosas do Brasil
2 cidade - c('São Paulo','Rio de Janeiro','Salvador','Brasília','Fortaleza', 'Belo ←
Horizonte','Manaus')
3 estado - c('SP','RJ','BA','DF','CE','MG','AM')
4 pop - c(11376685,6390290,2710698,2648532,2500194,2395785,1861838)
5
6 # As informações estão armazenadas em vetores
7 cidade
8 [1] São Paulo Rio de Janeiro Salvador Brasília
9 [5] Fortaleza Belo Horizonte Manaus
10 estado
11 [1] SP RJ BA DF CE MG AM
12 pop
13 [1] 11376685 6390290 2710698 2648532 2500194 2395785 1861838
52 / 110
Estruturas de dados
Dataframes
1 # Armazenando em um dataframe
2 top6pop -data.frame(cidade,estado,pop)
3 top6pop
4 cidade estado pop
5 1 São Paulo SP 11376685
6 2 Rio de Janeiro RJ 6390290
7 3 Salvador BA 2710698
8 4 Brasília DF 2648532
9 5 Fortaleza CE 2500194
10 6 Belo Horizonte MG 2395785
11 7 Manaus AM 1861838
53 / 110
Estruturas de dados
Dataframes
1 # Acessando as informações contidas em top6pop
2 top6pop$estado
3 [1] SP RJ BA DF CE MG AM
4 Levels: AM BA CE DF MG RJ SP
5 #
6 top6pop[2] # outra forma de acessar os estados
7 estado
8 1 SP
9 2 RJ
10 3 BA
11 4 DF
12 5 CE
13 6 MG
14 7 AM
15 #
16 top6pop$pop 2.7e6 # cidades com mais de 2.7 mi hab
17 [1] TRUE TRUE TRUE FALSE FALSE FALSE FALSE
18 #
19 top6pop$pop[top6pop$pop2.7e6] # populações maiores que 2.7 mi hab
20 [1] 11376685 6390290 2710698
54 / 110
Conteúdo
Linguagem R
Informações Preliminares
Sintaxe do R
Símbolos
Vetores
Instruções de Controle
Funções
Operadores
Estruturas de dados
Objetos e Classes
Gráficos
Pacotes e Dados do R
55 / 110
Objetos e Classes
R é uma linguagem orientada a objetos
Cada objeto em R tem um tipo
E cada objeto em R é membro de uma classe
Já encontramos diferentes classes: vetores de caracteres, vetores
numéricos, dataframes, listas, ...
1 class(1:10)
2 [1] integer
3 class(w)
4 [1] array
5 class(v)
6 [1] numeric
7 class(top6pop)
8 [1] data.frame
9 class(e)
10 [1] list
11 class(class)
12 [1] function
55 / 110
Objetos e Classes
Modelos e fórmulas
Um modelo é uma forma concisa de descrever um conjunto de
dados, usualmente por meio de uma fórmula matemática
Algumas vezes o objetivo é construir um modelo preditivo baseado em
dados disponíveis para avaliar novos dados
Outras vezes o objetivo é constrir um modelo descritivo que auxilie no
melhor entendimento dos dados
O R possui uma notação específica para decrever relações entre
variáveis
Suponha uma variável y onde assumimos uma dependência linear de
outras variáveis x1,x2,··· ,xn, resultando no modelo
y = c1x1 +c2x2 +··· +cnxn +ε
Em R, podemos escrever essa relação como um objeto fórmula
1 y ~ x1 + x2 + ... + xn
56 / 110
Objetos e Classes
Modelos e fórmulas
Vamos analisar o seguinte exemplo
1 # Conjunto de 20 pontos com ruído que segue uma distribuição normal
2 set.seed(2)
3 x = seq(from=0,to=5,length=20)
4 y = 2*x - 3 + rnorm(20) # rnorm(): dist. normal
5 xy= data.frame(x,y)
6 xy
7 x y
8 1 0.0000000 -3.8969145
9 2 0.2631579 -2.2888350
10 ...
11 20 5.0000000 7.4322652
12
13 # lm() constroi um modelo y~x e atribui a variável xy.lm
14 # -- y : variável dependente
15 # -- x : variável independente
16 xy.lm = lm(formula=y~x, data=xy)
57 / 110
Objetos e Classes
Modelos e fórmulas
1 # Vamos analisar o objeto xy.lm (modelo linear)
2 xy.lm
3
4 Call:
5 lm(formula = y ~ x, data = xy)
6
7 Coefficients:
8 (Intercept) x
9 -2.926 2.049
10
11 # Observe os coeficiente e compare com o modelo y = 2*x - 3 + rnorm(20)
58 / 110
Objetos e Classes
Modelos e fórmulas
1 # Para maiores detalhes, use a função summary()
2 summary(xy.lm)
3
4 Call:
5 lm(formula = y ~ x, data = xy)
6
7 Residuals:
8 Min 1Q Median 3Q Max
9 -2.57694 -0.45741 0.04638 0.62709 1.80821
10
11 Coefficients:
12 Estimate Std. Error t value Pr(|t|)
13 (Intercept) -2.9261 0.4675 -6.259 6.65e-06 ***
14 x 2.0486 0.1598 12.816 1.74e-10 ***
15 ---
16 Signif. codes: 0 *** 0.001 ** 0.01 * 0.05 . 0.1   1
17
18 Residual standard error: 1.085 on 18 degrees of freedom
19 Multiple R-squared: 0.9012, Adjusted R-squared: 0.8957
20 F-statistic: 164.3 on 1 and 18 DF, p-value: 1.738e-10
59 / 110
Objetos e Classes
Modelos e fórmulas
1 # predict.lm() avalia os dados do dataframe xy no modelo xy.lm
2 xy.pr=predict.lm(xy.lm)
3
4 # Usamos algumas ferramentas gráficas para visualizar
5 plot(x,y,col='blue'); lines(x,xy.pr,col='red')
60 / 110
Conteúdo
Linguagem R
Informações Preliminares
Sintaxe do R
Símbolos
Vetores
Instruções de Controle
Funções
Operadores
Estruturas de dados
Objetos e Classes
Gráficos
Pacotes e Dados do R
61 / 110
Gráficos
R inclui vários pacotes para a visualização de dados
Se você é familiarizado com planilhas eletrônicas, vocÊ perceberá
que o R pode gerar
gráficos de barras
gráficos de linhas
histogramas
gráficos de dispersão
...
Vamos verificar alguns casos por meio de exemplos
61 / 110
Gráficos
1 # Gráfico da função seno
2 x = seq(0,1,0.1)
3 y = sin(2*pi*x)
4 plot(x,y,type='b',col='darkgreen',main='Função seno',xlab='eixo-x', ←
ylab='eixo-y',lwd=2)
62 / 110
Gráficos
1 # Gráficos de funções paramétricas de uma variável
2 par(mfrow=c(1,2)) # uma linha e duas colunas
3 curve( 3*x^2+2*x+1, -1, 2,col=red,lwd=2)
4 curve(-3*x^2+2*x+1, -1, 2,col=blue,lwd=2)
63 / 110
Gráficos
1 # Histograma de uma série dados com distribuição normal
2 x = rnorm(1000)
3 hist(x,col=yellow,breaks=40)
64 / 110
Gráficos
1 # Um gráfico de barras
2 barplot(c(2,4,7,5,3,1),col='lightblue')
65 / 110
Gráficos
1 # Gráfico de pizza
2 pie(1:6, col = rainbow(6), labels= LETTERS[1:6], radius = 0.9)
66 / 110
Gráficos
1 # Gráfico de densidade
2 x = rnorm(200)
3 plot(density(x),col='red',lwd=2)
67 / 110
Gráficos
1 # Boxplots
2 x - rnorm(200) # distribuição normal
3 y - rlnorm(200) # distribuição log-normal
4 plot(x, y, xlim=c(-5,5), ylim=c(-2,8))
5 boxplot(x, col=gold , horizontal=TRUE, at=-1, add=TRUE)
6 boxplot(y, col=blue, horizontal=FALSE, at=-4, add=TRUE)
68 / 110
Conteúdo
Linguagem R
Informações Preliminares
Sintaxe do R
Símbolos
Vetores
Instruções de Controle
Funções
Operadores
Estruturas de dados
Objetos e Classes
Gráficos
Pacotes e Dados do R
69 / 110
Pacotes e Dados do R
Dados
O R possui pacotes de dados internos, usados principamente para
demos e desenvolvimento de pacotes
1 # Os pacotes de dados disponíveis são listados através do comando
2 data()
3 Data sets in package 'datasets':
4
5 AirPassengers Monthly Airline Passenger Numbers 1949-1960
6 BJsales Sales Data with Leading Indicator
7 ...
8 volcano Topographic Information on Maunga Whau Volcano
9 warpbreaks The Number of Breaks in Yarn during Weaving
10 women Average Heights and Weights for American Women
11
12
13 Use data(package = .packages(all.available = TRUE))
14 to list the data sets in all *available* packages.
69 / 110
Pacotes e Dados do R
Dados
1 # Para acessar um determinado conteúdo
2 data(trees)
3 trees
4 Girth Height Volume
5 1 8.3 70 10.3
6 2 8.6 65 10.3
7 ...
8 31 20.6 87 77.0
9
10 # Operando com os dados
11 class(trees)
12 [1] data.frame
13 mean(trees)
14 Girth Height Volume
15 13.24839 76.00000 30.17097
16 str(trees) # mostra informações sobre a estrututa do objeto
17 'data.frame': 31 obs. of 3 variables:
18 $ Girth : num 8.3 8.6 8.8 10.5 10.7 10.8 11 11 11.1 11.2 ...
19 $ Height: num 70 65 63 72 81 83 66 75 80 75 ...
20 $ Volume: num 10.3 10.3 10.2 16.4 18.8 19.7 15.6 18.2 22.6 19.9 ...
70 / 110
Pacotes e Dados do R
Dados
1 # Medidas do fluxo anual do Nilo na cidade de Ashwan 1871-1970
2 data(Nile)
3 Nile
4 Time Series:
5 Start = 1871
6 End = 1970
7 Frequency = 1
8 [1] 1120 1160 963 1210 1160 1160 813 1230 1370 1140 995 935
9 [13] 1110 994 1020 960 1180 799 958 1140 1100 1210 1150 1250
10 [25] 1260 1220 1030 1100 774 840 874 694 940 833 701 916
11 [37] 692 1020 1050 969 831 726 456 824 702 1120 1100 832
12 [49] 764 821 768 845 864 862 698 845 744 796 1040 759
13 [61] 781 865 845 944 984 897 822 1010 771 676 649 846
14 [73] 812 742 801 1040 860 874 848 890 744 749 838 1050
15 [85] 918 986 797 923 975 815 1020 906 901 1170 912 746
16 [97] 919 718 714 740
17 str(Nile)
18 Time-Series [1:100] from 1871 to 1970: 1120 1160 963 1210 1160 1160 813 1230 1370 ←
1140 ...
19 class(Nile) # objeto time series (série temporal)
20 [1] ts
71 / 110
Pacotes e Dados do R
Pacotes
Um pacote é um conjunto de funções, arquivos de ajuda e arquivos
de dados empacotados juntos
Pacotes em R são similares aos modulos em Perl, bibliotecas em C e
classes em Java
Tipicamente, todas as funções em um pacote estão relacionadas
entre si
O pacote stats agrupa funções de análise estatística
1 # Carrega os pacote -- comandos equivalentes
2 library(stats)
3 require(stats)
4
5 # Para maiores informações
6 library(help=stats)
7 ?stats
72 / 110
Pacotes e Dados do R
Pacotes
R oferece um grande número de pacotes
Análise gráfica
Aplicações industriais
Ciências sociais
....
Alguns pacotes veem com o R, outros são instalados através de
repositórios
73 / 110
Pacotes e Dados do R
Pacotes
1 # Pacotes carregados automaticamente
2 getOption(defaultPackages)
3 [1] datasets utils grDevices graphics methods stats
4
5 # Pacotes disponíveis para serem carregados
6 (.packages(all.available=TRUE))
7 [1] ade4 calibrate clusterSim corrgram
8 [6] Defaults ellipse gclus Hmisc
9 [11] nutshell quantmod R2HTML RColorBrewer
10 [16] seriation TSP TTR xts
11 [21] ape biclust bitops cba
12 [26] colorspace dataframes2xls e1071 emoa
13
14 # Instalação de pacotes -- repositórios online
15 install.packages('psy')
16
17 # Remoção de pacotes
18 remove.packages(c(tree, maptree),.Library)
74 / 110
Conteúdo
Análise de Casos
Ajuste de Curvas
Vazão da Represa de Furnas
Análise de Adubação da Soja
Computação Simbólica no R
75 / 110
Ajuste de Curvas
Vamos usar dados que relacionam a temperatura em graus Celsius
com o valor da pressão de mercúrio.
1 # Carrega os dados
2 data(pressure)
3 head(pressure)
4 temperature pressure
5 1 0 0.0002
6 2 20 0.0012
7 3 40 0.0060
8 4 60 0.0300
9 5 80 0.0900
10 6 100 0.2700
11
12 pres = pressure$pressure # cria variáveis auxiliares
13 temp = pressure$temperature
14 plot(pres~temp, ylim=c(-50,400)) # gráfico dos dados
75 / 110
Ajuste de Curvas
1 # Constrói os modelos
2 lm1=lm(pres~temp) # linear
3 lm2=lm(pres~temp + I(temp^2)) # quadrático
4 lm3=lm(pres~temp + I(temp^2)+ I(temp^3)) # cúbico
5
6 summary(lm1)
7 summary(lm2)
8 summary(lm3)
9
10 # Gráficos dos modelos
11 plot(pres~temp, ylim=c(-50,400),xlab='Temperatura',ylab='Pressão')
12 lines(predict(lm1)~temp,col='green')
13 lines(predict(lm2)~temp,col='red')
14 lines(predict(lm3)~temp,col='blue')
15 # Legenda
16 legend(x='topleft',legend=c('linear','quadrático','cúbico'),col=c(3,2,4),lwd=1)
76 / 110
Ajuste de Curvas
77 / 110
Conteúdo
Análise de Casos
Ajuste de Curvas
Vazão da Represa de Furnas
Análise de Adubação da Soja
Computação Simbólica no R
78 / 110
Vazão da Represa de Furnas
Análise gráfica da série histórica (1931-2010) da vazão natural
mensal da represa de Furnas
Fonte: http://www.ons.org.br/operacao/vazoes_naturais.aspx
Planilha eletrônica contendo as séries de vazões naturais médias
mensais
78 / 110
Vazão da Represa de Furnas
1 #
2 # Análise da série histórica das vazões mensais da barragens de Furnas
3 # Fonte: http://www.ons.org.br/operacao/vazoes_naturais.aspx
4 #
5 rm(list=ls()) # apaga todo o workspace
6 print(getwd()) # onde estamos?
7
8
9 # Dados das vazões na planilha
10 # Vazoes_Mensais_1931_2010.xls
11 #
12 library(gdata) # suporte para leitura de planilhas
13 v - read.xls(xls='./data/Vazoes_Mensais_1931_2010.xls',sheet=1)
14 View(v)
15
16 ano - v[ANO] # primeira coluna
17 vaz - v[,-1] # todos os dados exceto a 1a coluna
18
19
20 # Aplica a função média nas colunas de v
21 vaz.m - apply(vaz,2,mean) # médias das vazões mensais
22 View(vaz.m)
79 / 110
Vazão da Represa de Furnas
1 # Análise gráfica das médias das vazões mensais
2 bp - barplot(vaz.m, ylim=c(0,1.2*max(vaz.m)), col=seagreen,
3 ylab=Vazão, las=3)
4 text(bp, vaz.m, label=round(vaz.m, 0), pos=3,srt=90, cex=0.8, offset=1.5)
5 title(Médias mensais das vazões de Furnas)
6 box()
80 / 110
Vazão da Represa de Furnas
1 # Boxplots das vazões mensais
2 boxplot(vaz, las=3, col=steelblue, notch=1, ylab=Vazão,
3 main=Vazões mensais de Furnas)
4 points(vaz.m, col='red', lwd=1, pch=19)
5 lines(vaz.m, col='red', lwd=1)
81 / 110
Vazão da Represa de Furnas
1 # Histograma das vazões mensais
2 vaz.t - unlist(vaz)
3 hist(vaz.t,breaks=20,freq=F,ylim=c(0,12e-4), ylab='Densidade', xlab='Vazão',
4 main='Histograma das Vazões', col='lightblue')
5 lines(density(vaz.t), col='red')
6 rug(vaz.t, col='red')
82 / 110
Conteúdo
Análise de Casos
Ajuste de Curvas
Vazão da Represa de Furnas
Análise de Adubação da Soja
Computação Simbólica no R
83 / 110
Análise de Adubação da Soja
Experimento em casa de vegetação com a cultura da soja, 2 plantas
por parcela com:
3 níveis do fator conteúdo de do solo água (agua),
5 níveis do fator adubação potássica (potassio),
parcelas arranjadas em 5 blocos (bloco).
Foram observadas as seguintes variáveis:
1. rengrao : redimento de grãos
2. pesograo : peso de grãos
3. kgrao : conteúdo de potássio no grão
4. pgrao : conteúdo de fósforo no grão
5. ts : total de sementes por planta
6. nvi : número de vagens inviáveis
7. nv : número de vagens total
Fonte: http://www.leg.ufpr.br/~walmes/
83 / 110
Análise de Adubação da Soja
1 # Leitura dos dados no arquivo soja.txt que encontra-se no diretório data
2 #
3 # Primeiro, devemos saber em que diretório estamos
4 getwd()
5 # Depois, devemos mudar para o diretório onde estão os dados
6 setwd('diretorio_onde_estao_os_dados')
7 #
8 # O comando read.table() lê o arquivo em formato de tabela e cria um
9 # dataframe a partir dele, com as entradas correspondendo às linhas
10 # e as variáveis correspondendo às colunas
11 #
12 soja - read.table('./data/soja.txt',header=TRUE)
13
14 View(soja) # visualização dos dados
15
16 # Algumas informações sobre os dados
17 class(soja) # classe do objeto
18 names(soja) # nomes das colunas
19 dim(soja) # dimensões
20 str(soja) # estrutura
21 head(soja) # cabeçalho
22 soja # imprime todos os registros
84 / 110
Análise de Adubação da Soja
1 # Visualização rápida dos dados
2 head(soja) # cabeçalho
3 potassio agua bloco rengrao pesograo kgrao pgrao ts nvi nv
4 1 0 37.5 I 14.55 10.70 15.13 1.18 136 22 56
5 2 30 37.5 I 21.51 13.53 17.12 0.99 159 2 62
6 3 60 37.5 I 24.62 15.78 19.11 0.82 156 0 66
7 4 120 37.5 I 21.88 12.80 18.12 0.85 171 2 68
8 5 180 37.5 I 28.11 14.79 19.11 0.88 190 0 82
9 6 0 50.0 I 17.16 12.26 12.14 1.05 140 20 63
10
11 names(soja)
12 [1] potassio agua bloco rengrao pesograo kgrao pgrao ts
13 [9] nvi nv
85 / 110
Análise de Adubação da Soja
1 # Acessando informações das variáveis ($)
2
3 soja$bloco # a variável bloco foi lida como um fator (variável categórica)
4 [1] I I I I I I I I I I I I I I I II II II
5 [24] II II II II II II II III III III III III III III III III III III
6 [47] IV IV IV IV IV IV IV IV IV IV IV IV IV IV V V V V
7 [70] V V V V V V
8 Levels: I II III IV V
9
10 soja$rengrao
11 [1] 14.55 21.51 24.62 21.88 28.11 17.16 24.44 28.50 32.94 28.76 14.13 19.71
12 [16] 15.72 19.72 24.29 25.39 28.45 15.44 28.12 31.49 29.95 30.06 15.42 23.68
13 [31] 12.77 20.45 24.35 27.15 24.08 16.01 24.57 28.85 26.23 26.36 16.08 20.99
14 [46] 14.26 23.71 22.76 22.46 22.97 15.54 18.48 25.54 30.29 30.64 17.26 20.51
15 [61] 10.30 16.28 23.61 29.66 23.34 14.41 17.24 29.08 29.52 27.98 17.56 20.05
16
17 soja$potassio # a variável potassio também écategórica, mas foi lida como numérica
18 [1] 0 30 60 120 180 0 30 60 120 180 0 30 60 120 180 0 30 60
19 [24] 120 180 0 30 60 120 180 0 30 60 120 180 0 30 60 120 180 0
20 [47] 30 60 120 180 0 30 60 120 180 0 30 60 120 180 0 30 60 120
21 [70] 180 0 30 60 120 180
86 / 110
Análise de Adubação da Soja
1 # O comando attach() anexa a base de dados ao workspace do R
2 #
3 # Os objetos no banco de dados podem ser acessados simplesmente
4 # digitando seus nomes
5
6 attach(soja)
7 rengrao
8 [1] 14.55 21.51 24.62 21.88 28.11 17.16 24.44 28.50 32.94 28.76
9 ...
10 [73] 29.90 20.86 35.50
11
12 # Para desanexar a base de dados
13 detach(soja)
14 rengrao
15 Error: object 'rengrao' not found
87 / 110
Análise de Adubação da Soja
1 # Exploração númerica, médias por nível de potássio, água e potássio:água
2 attach(soja) # anexa a base de dados
3 levels(factor(potassio)) # factor() transforma a variável em categórica e levels() ←
extrai as categorias
4 [1] 0 30 60 120 180
5
6 tapply(rengrao,potassio,mean) # tapply() aplica um função a um grupo de valores de ←
um array
7 0 30 60 120 180
8 15.10733 21.29733 27.48200 29.51067 30.43200
9
10 tapply(rengrao,list(agua),mean)
11 37.5 50 62.5
12 21.6956 25.1040 27.4980
13
14 tapply(rengrao,list(potassio,agua),mean) # médias de rendimento para potassio:agua
15 37.5 50 62.5
16 0 13.520 15.712 16.090
17 30 20.334 22.570 20.988
18 60 23.926 28.692 29.828
19 120 25.308 29.786 33.438
20 180 25.390 28.760 37.146
88 / 110
Análise de Adubação da Soja
1 # O comando with avalia uma expressão em uma base de dados
2 # Assim, não precisamos anexar soja
3
4 # A mesma exploração numérica anterior
5 with(soja, tapply(rengrao, list(potassio), mean))
6 0 30 60 120 180
7 15.10733 21.29733 27.48200 29.51067 30.43200
8
9 with(soja, tapply(rengrao, list(agua), mean))
10 37.5 50 62.5
11 21.6956 25.1040 27.4980
12
13 with(soja, tapply(rengrao, list(potassio, agua), mean))
14 37.5 50 62.5
15 0 13.520 15.712 16.090
16 30 20.334 22.570 20.988
17 60 23.926 28.692 29.828
18 120 25.308 29.786 33.438
19 180 25.390 28.760 37.146
89 / 110
Análise de Adubação da Soja
1 # Selecionando subconjuntos dos dados de acordo com os níveis das categorias
2 subset(soja, potassio==0)
3 subset(soja, bloco==I)
4 subset(soja, potassio==0  bloco==I)
5
6
7 # Selecionando subconjunto dos dados por valores das respostas
8 subset(soja, rengrao15)
9 subset(soja, rengrao15  pesograo11)
90 / 110
Análise de Adubação da Soja
1 # Gráficos simples de dispersão (rótulos, cores, simbolos, tamanhos)
2 plot(rengrao~potassio, data=subset(soja, agua==50))
3 plot(rengrao~potassio, data=subset(soja, agua==50),
4 xlab=Dose de potássio, ylab=Rendimento de grãos,
5 col=2, pch=19, cex=1.2)
91 / 110
Análise de Adubação da Soja
1 # Boxplot (subconjuntos e cores)
2 boxplot(rengrao~potassio, data=subset(soja, agua==50))
3 boxplot(rengrao~potassio, data=soja, col=yellow)
92 / 110
Análise de Adubação da Soja
1 # Todos níveis de água ao mesmo tempo (título)
2 par(mfrow=c(1,3)) # divide a janela gráfica em uma linha em três colunas
3 boxplot(rengrao~potassio, data=subset(soja, agua==37.5), ylim=c(10,45), main=37.5%)
4 boxplot(rengrao~potassio, data=subset(soja, agua==50 ), ylim=c(10,45), main=50.0%)
5 boxplot(rengrao~potassio, data=subset(soja, agua==62.5), ylim=c(10,45), main=62.5%)
93 / 110
Análise de Adubação da Soja
1 # Gráficos de barras (adição de texto)
2 par(mfrow=c(1,1)) # restaura a janela gráfica
3 pot.m - with(soja, tapply(rengrao, potassio, mean))
4 bp - barplot(pot.m) # alterar para ylim=c(0,32)
5 text(bp, pot.m, label=round(pot.m, 3), pos=3) # pos=3
6 title(Médias dos tratamentos)
7 box()
94 / 110
Análise de Adubação da Soja
1 # Melhorando o aspecto
2 bp - barplot(pot.m, ylim=c(0,33), col=seagreen,
3 xlab=Dose de potássio, ylab=Rendimento médio de grãos)
4 text(bp, pot.m, label=round(pot.m, 3), pos=3, font=3)
5 title(Médias dos tratamentos)
6 box()
95 / 110
Análise de Adubação da Soja
1 # Mais análise gráfica: rendimento em função de potassio para cada grupo de água
2 require(lattice) # biblioteca para gráficos mais elaborados
3
4 xyplot(rengrao~potassio, groups=agua, data=soja)
5 xyplot(rengrao~potassio, groups=agua, data=soja, type=c(p,a))
6 xyplot(rengrao~potassio|agua, data=soja, type=c(p,a))
7 xyplot(rengrao~potassio|agua, data=soja, type=c(p,smooth))
96 / 110
Conteúdo
Análise de Casos
Ajuste de Curvas
Vazão da Represa de Furnas
Análise de Adubação da Soja
Computação Simbólica no R
97 / 110
Computação Simbólica no R
Em R podemos calcular as derivadas (simbólicas) de expressões
simples
1 # Operações simbólicas com expressões simples
2 rm(list=ls()) # limpa o espaço de trabalho
3
4 # Cria uma expressão simbólica
5 f = expression(cos(x) + x * sin(x))
6 class(f)
7 [1] expression
8
9 # Avalia a expressão, mas x ainda não exite...
10 eval(c)
11 Error in eval(expr, envir, enclos) : object 'x' not found
12
13 # Repetindo, mas agora com a criação de x
14 x=seq(0,pi,length=20)
15 eval(f)
16 [1] 1.00000000 1.01357652 1.05319340 1.11556315 1.19537338 1.28553021
17 [7] 1.37748586 1.46163791 1.52778475 1.56561949 1.56524303 1.51767600
18 [13] 1.41534884 1.25255020 1.02581462 0.73423276 0.37966969 -0.03311993
19 [19] -0.49648737 -1.00000000
97 / 110
Computação Simbólica no R
1 # O grafico de f -- o rótulo de y éuma expressão
2 plot(ef~x,type='b', ylab=f, col='violetred4')
98 / 110
Computação Simbólica no R
1 # Derivando f simbolicamente usando o comando D()
2 D(f) # faltou o x
3 Error in .Internal(D(expr, name)) : 'name' is missing
4 D(f,x)
5 sin(x) + x * cos(x) - sin(x)
6
7 # Para derivadas de ordem superior, definimos a função
8 DD - function(expr,name, order = 1) {
9 if(order  1) stop('order' must be = 1)
10 if(order == 1) D(expr,name)
11 else DD(D(expr, name), name, order - 1)
12 }
13
14 DD(f,x,1)
15 sin(x) + x * cos(x) - sin(x)
16
17 DD(f,x,2)
18 cos(x) + (cos(x) - x * sin(x)) - cos(x)
19
20 DD(f,x,4)
21 -(cos(x) + (cos(x) + (cos(x) - x * sin(x))) + cos(x) - cos(x))
99 / 110
Computação Simbólica no R
1 # Continuando com as derivadas de ordem superior
2 f4=DD(f,x,4)
3 f4
4 -(cos(x) + (cos(x) + (cos(x) - x * sin(x))) + cos(x) - cos(x))
5
6 plot(eval(f4)~x, main=f4, type='b') # observe o título do gráfico
100 / 110
Conteúdo
Interface com Outras Linguagens
R e outras Linguagens de Programação
Combinando R com C e Fortran
101 / 110
R e outras Linguagens de Programação
Em R, podemos reutilizar códigos desenvolvidos em outras
linguagens
R e C (ou C++)
R e Fortran
R e Python (pacotes rpy, rpy2 e RSPython)
R e Java (pacotes RJava e JRI)
R e Perl (pacote RSPerl)
R e MySQL (pacote RMySQL)
101 / 110
Conteúdo
Interface com Outras Linguagens
R e outras Linguagens de Programação
Combinando R com C e Fortran
102 / 110
Combinando R com C e Fortran
O R é relativamente lento em algoritmos iterativos que exigem laços
(loops) repetidas vezes
Uma maneira de obter todas as vantagens de velocidade de C ou
Fortran com a maioria da conveniência de R é escrever o loop
interno em C e chamá-lo de dentro do R
Vamos considerar um problema bem simples, elevar ao quadradoos
elementos de um vetor x = (x1,x2,...,xn−1,xn)
q(x) = (x2
1 ,x2
2 ,...,x2
n−1,x2
n )
102 / 110
Combinando R com C e Fortran
Aqui temos o código em linguagem C com uma solução para o
problema
O R exige duas proriedades da função:
A função não retorna nenhum valor. Todo o trabalho é feito mudando os
valores dos argumento.
Todos os argumentos são ponteiros. Em R, mesmo escalares são vetores
(de comprimento um).
1 /* pot2c.c */
2 void pot2c(int *nin, double *x)
3 {
4 int n = nin[0];
5 int i;
6
7 for (i=0; in; i++)
8 x[i] = x[i] * x[i];
9 }
103 / 110
Combinando R com C e Fortran
Aqui temos o a mesma função em uma subrotina em Fortran
Ela tem as mesmas duas propriedades da função em C:
Ela não retorna valor, pois é uma subrotina. Funções (em Fortran) não
são reconhecidas pelo R.
A segunda proriedade é automática em Fortran. Fortran só aceita
passagens de argumentos por referência, que corresponde aos ponteiros
em C.
1 ! pot2f.f
2 subroutine pot2f(n, x)
3
4 integer n
5 double precision x(n)
6 integer i
7
8 do i = 1, n
9 x(i) = x(i) ** 2
10 enddo
11
12 end
104 / 110
Combinando R com C e Fortran
A compilação para a geração de bibliotecas dinâmicas, é feita em um
terminal Linux, e portanto fora do R (e usando o proprio R)
1 # Compila o código em C
2 R CMD SHLIB pot2c.c
3 # Resultado do comando
4 # gcc -I/usr/share/R/include -fpic -std=gnu99 -O3 -pipe -g -c pot2c.c -o pot2c.o
5 # gcc -shared -o pot2c.so pot2c.o -L/usr/lib/R/lib -lR
6
7
8 # Compila o código em Fortran
9 R CMD SHLIB pot2f.f
10 # Resultado do comando
11 # gfortran -fpic -O3 -pipe -g -c pot2f.f -o pot2f.o
12 # gcc -shared -o pot2f.so pot2f.o -lgfortran -lm -lquadmath -L/usr/lib/R/lib -lR
Se a compilação funcionar corretamente, serão gerados os arquivos
pot2c.so e pot2f.so
105 / 110
Combinando R com C e Fortran
Voltando ao R, podemos carregar as bibliotecas
1 # Carregas as biblotecas geradas
2 dyn.load(pot2c.so)
3 dyn.load(pot2f.so)
4
5 # Verifica as bibliotecas carregadas com o comando getLoadedDLLs()
6 getLoadedDLLs()
7 Filename Dynamic.Lookup
8 base base FALSE
9 methods /usr/lib/R/library/methods/libs/methods.so FALSE
10 grDevices /usr/lib/R/library/grDevices/libs/grDevices.so FALSE
11 stats /usr/lib/R/library/stats/libs/stats.so FALSE
12 pot2c /tmp/pot2c.so TRUE
13 pot2f /tmp/pot2f.so TRUE
106 / 110
Combinando R com C e Fortran
Executando o função em C
1 # Para testar, vamos criar um vetor x
2 x=c(1,2,3,4,5)
3 x
4 [1] 1 2 3 4 5
5
6 typeof(x) # x deve ser double, assim como o argumento na função em C
7 [1] double
8
9 # A chamada da função em R éfeita pelo comando .C()
10 .C(pot2c, n=length(x), x=x)
11 $n
12 [1] 5
13
14 $x
15 [1] 1 4 9 16 25
107 / 110
Combinando R com C e Fortran
Executando o subrotina em Fortran
1 # A chamada da subrotina em R éfeita pelo comando .Fortran()
2 .Fortran(pot2f, n=length(x), x=x)
3 $n
4 [1] 5
5
6 $x
7 [1] 1 4 9 16 25
108 / 110
Combinando R com C e Fortran
Uma solução mais agradável é criar uma função envelope
Permite checar alguns erros em R, o que é mais fácil que em C
Permite que alguns argumento calculados não sejam mostrados
Permite retornar somente o que o necessário
1 # Função envelope
2 pot2c - function(x) {
3 if (!is.numeric(x))
4 stop(O argumento x deve ser numérico)
5 out - .C(pot2c,
6 n=as.integer(length(x)),
7 x=as.double(x))
8 return(out$x)
9 }
10
11 # Executando a função
12 pot2c(x)
13 [1] 1 4 9 16 25
109 / 110
110 / 110

Mais conteúdo relacionado

Mais procurados (20)

Ud2
Ud2Ud2
Ud2
 
Introduçãso a linguagem c
Introduçãso a linguagem cIntroduçãso a linguagem c
Introduçãso a linguagem c
 
Linguagem C clecioamerico
Linguagem C clecioamericoLinguagem C clecioamerico
Linguagem C clecioamerico
 
Curso de Linguagem C
Curso de Linguagem CCurso de Linguagem C
Curso de Linguagem C
 
Introdução à Linguagem C
Introdução à Linguagem CIntrodução à Linguagem C
Introdução à Linguagem C
 
Introdução+à+linguagem+c
Introdução+à+linguagem+cIntrodução+à+linguagem+c
Introdução+à+linguagem+c
 
Compiladores 6
Compiladores 6Compiladores 6
Compiladores 6
 
SubProgramas
SubProgramasSubProgramas
SubProgramas
 
R - Software Estatistico
R - Software EstatisticoR - Software Estatistico
R - Software Estatistico
 
Linguagem c
Linguagem cLinguagem c
Linguagem c
 
Apostila de Linguagem C
Apostila de Linguagem CApostila de Linguagem C
Apostila de Linguagem C
 
Compiladores 7
Compiladores 7Compiladores 7
Compiladores 7
 
03 linguagem ladder instrucoes de bit
03 linguagem ladder instrucoes de bit03 linguagem ladder instrucoes de bit
03 linguagem ladder instrucoes de bit
 
Final presentation of proposal language
Final presentation of proposal languageFinal presentation of proposal language
Final presentation of proposal language
 
Linguagem c
Linguagem cLinguagem c
Linguagem c
 
Introducao a LPC
Introducao a LPCIntroducao a LPC
Introducao a LPC
 
Apostila linguagem c
Apostila linguagem cApostila linguagem c
Apostila linguagem c
 
E booklingc
E booklingcE booklingc
E booklingc
 
Introdução à Linguagem de Programação GO
Introdução à Linguagem de Programação GOIntrodução à Linguagem de Programação GO
Introdução à Linguagem de Programação GO
 
Algoritomos aula 3 rafael
Algoritomos aula 3 rafaelAlgoritomos aula 3 rafael
Algoritomos aula 3 rafael
 

Destaque

Cap 02 análise de tensões e deformações
Cap 02   análise de tensões e deformaçõesCap 02   análise de tensões e deformações
Cap 02 análise de tensões e deformaçõesBianca Alencar
 
Unidade 02 - Fundamentos de Mecânica das Estruturas
Unidade 02 - Fundamentos de Mecânica das EstruturasUnidade 02 - Fundamentos de Mecânica das Estruturas
Unidade 02 - Fundamentos de Mecânica das EstruturasLeonardo Goliatt
 
Unidade 05 - Fundamentos de Mecânica das Estruturas
Unidade 05 - Fundamentos de Mecânica das EstruturasUnidade 05 - Fundamentos de Mecânica das Estruturas
Unidade 05 - Fundamentos de Mecânica das EstruturasLeonardo Goliatt
 
Mecânica dos Sólidos - Unidade 02
Mecânica dos Sólidos - Unidade 02Mecânica dos Sólidos - Unidade 02
Mecânica dos Sólidos - Unidade 02Leonardo Goliatt
 
Unidade 01 - Fundamentos de Mecânica das Estruturas
Unidade 01 - Fundamentos de Mecânica das EstruturasUnidade 01 - Fundamentos de Mecânica das Estruturas
Unidade 01 - Fundamentos de Mecânica das EstruturasLeonardo Goliatt
 
Cap 2 problemas estaticamente indeterminados
Cap 2   problemas estaticamente indeterminadosCap 2   problemas estaticamente indeterminados
Cap 2 problemas estaticamente indeterminadosBianca Alencar
 
Transformacao de tensoes
Transformacao de tensoesTransformacao de tensoes
Transformacao de tensoesBianca Alencar
 
Unidade 00 - Fundamentos de Mecânica das Estruturas
Unidade 00 - Fundamentos de Mecânica das EstruturasUnidade 00 - Fundamentos de Mecânica das Estruturas
Unidade 00 - Fundamentos de Mecânica das EstruturasLeonardo Goliatt
 
Mecânica dos Sólidos - Unidade 03
Mecânica dos Sólidos - Unidade 03Mecânica dos Sólidos - Unidade 03
Mecânica dos Sólidos - Unidade 03Leonardo Goliatt
 
Aços estruturais - Engenharia Mecânica
Aços estruturais - Engenharia MecânicaAços estruturais - Engenharia Mecânica
Aços estruturais - Engenharia MecânicaRodrigo Meireles
 
Mecanica aplicada-apostila
Mecanica aplicada-apostilaMecanica aplicada-apostila
Mecanica aplicada-apostilaMatheus Araujo
 
Mecânica dos Sólidos - Unidade 01
Mecânica dos Sólidos - Unidade 01Mecânica dos Sólidos - Unidade 01
Mecânica dos Sólidos - Unidade 01Leonardo Goliatt
 
Resistência dos Materiais II - Unidade 01
Resistência dos Materiais II - Unidade 01Resistência dos Materiais II - Unidade 01
Resistência dos Materiais II - Unidade 01Leonardo Goliatt
 
Unidade 04 - Fundamentos de Mecânica das Estruturas
Unidade 04 - Fundamentos de Mecânica das EstruturasUnidade 04 - Fundamentos de Mecânica das Estruturas
Unidade 04 - Fundamentos de Mecânica das EstruturasLeonardo Goliatt
 
Resistência dos Materiais II - Unidade 02
Resistência dos Materiais II - Unidade 02Resistência dos Materiais II - Unidade 02
Resistência dos Materiais II - Unidade 02Leonardo Goliatt
 
Manual segurança prensas e similares
Manual segurança prensas e similares Manual segurança prensas e similares
Manual segurança prensas e similares Matheus Araujo
 

Destaque (20)

Anna Shevchenko_PDF
Anna Shevchenko_PDFAnna Shevchenko_PDF
Anna Shevchenko_PDF
 
Serviço
ServiçoServiço
Serviço
 
Apostila
ApostilaApostila
Apostila
 
Cap 02 análise de tensões e deformações
Cap 02   análise de tensões e deformaçõesCap 02   análise de tensões e deformações
Cap 02 análise de tensões e deformações
 
Unidade 02 - Fundamentos de Mecânica das Estruturas
Unidade 02 - Fundamentos de Mecânica das EstruturasUnidade 02 - Fundamentos de Mecânica das Estruturas
Unidade 02 - Fundamentos de Mecânica das Estruturas
 
Unidade 05 - Fundamentos de Mecânica das Estruturas
Unidade 05 - Fundamentos de Mecânica das EstruturasUnidade 05 - Fundamentos de Mecânica das Estruturas
Unidade 05 - Fundamentos de Mecânica das Estruturas
 
Mecânica dos Sólidos - Unidade 02
Mecânica dos Sólidos - Unidade 02Mecânica dos Sólidos - Unidade 02
Mecânica dos Sólidos - Unidade 02
 
Unidade 01 - Fundamentos de Mecânica das Estruturas
Unidade 01 - Fundamentos de Mecânica das EstruturasUnidade 01 - Fundamentos de Mecânica das Estruturas
Unidade 01 - Fundamentos de Mecânica das Estruturas
 
Cap 2 problemas estaticamente indeterminados
Cap 2   problemas estaticamente indeterminadosCap 2   problemas estaticamente indeterminados
Cap 2 problemas estaticamente indeterminados
 
Transformacao de tensoes
Transformacao de tensoesTransformacao de tensoes
Transformacao de tensoes
 
Unidade 00 - Fundamentos de Mecânica das Estruturas
Unidade 00 - Fundamentos de Mecânica das EstruturasUnidade 00 - Fundamentos de Mecânica das Estruturas
Unidade 00 - Fundamentos de Mecânica das Estruturas
 
Mecânica dos Sólidos - Unidade 03
Mecânica dos Sólidos - Unidade 03Mecânica dos Sólidos - Unidade 03
Mecânica dos Sólidos - Unidade 03
 
Aços estruturais - Engenharia Mecânica
Aços estruturais - Engenharia MecânicaAços estruturais - Engenharia Mecânica
Aços estruturais - Engenharia Mecânica
 
Mecanica aplicada-apostila
Mecanica aplicada-apostilaMecanica aplicada-apostila
Mecanica aplicada-apostila
 
Mecânica dos Sólidos - Unidade 01
Mecânica dos Sólidos - Unidade 01Mecânica dos Sólidos - Unidade 01
Mecânica dos Sólidos - Unidade 01
 
Resistência dos Materiais II - Unidade 01
Resistência dos Materiais II - Unidade 01Resistência dos Materiais II - Unidade 01
Resistência dos Materiais II - Unidade 01
 
Unidade 04 - Fundamentos de Mecânica das Estruturas
Unidade 04 - Fundamentos de Mecânica das EstruturasUnidade 04 - Fundamentos de Mecânica das Estruturas
Unidade 04 - Fundamentos de Mecânica das Estruturas
 
Resistência dos Materiais II - Unidade 02
Resistência dos Materiais II - Unidade 02Resistência dos Materiais II - Unidade 02
Resistência dos Materiais II - Unidade 02
 
Apostila resistência dos materiais
Apostila resistência dos materiaisApostila resistência dos materiais
Apostila resistência dos materiais
 
Manual segurança prensas e similares
Manual segurança prensas e similares Manual segurança prensas e similares
Manual segurança prensas e similares
 

Semelhante a Mini R

Estrutura de linguagem de programação - Aula 2.pptx
Estrutura de linguagem de programação - Aula 2.pptxEstrutura de linguagem de programação - Aula 2.pptx
Estrutura de linguagem de programação - Aula 2.pptxMarceloRosenbrock1
 
Introdução a Linguagem C
Introdução a Linguagem CIntrodução a Linguagem C
Introdução a Linguagem Capolllorj
 
Cartilha de R para Estatística e Data Science.pdf
Cartilha de R para Estatística e Data Science.pdfCartilha de R para Estatística e Data Science.pdf
Cartilha de R para Estatística e Data Science.pdfEdkallenn Lima
 
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop PythonIEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop PythonDiogo Gomes
 
Linguagem C 01 Primeiros Passos
Linguagem C 01 Primeiros PassosLinguagem C 01 Primeiros Passos
Linguagem C 01 Primeiros PassosRegis Magalhães
 
Estruturação de Linguagens de Programação (Pascal e C++)
Estruturação de Linguagens de Programação (Pascal e C++)Estruturação de Linguagens de Programação (Pascal e C++)
Estruturação de Linguagens de Programação (Pascal e C++)Mauricio Volkweis Astiazara
 
Algoritmos e Programação: Apresentação da ferramenta de programação. Comandos...
Algoritmos e Programação: Apresentação da ferramenta de programação. Comandos...Algoritmos e Programação: Apresentação da ferramenta de programação. Comandos...
Algoritmos e Programação: Apresentação da ferramenta de programação. Comandos...Alex Camargo
 
LIA - Linguagem Interpretada de Algoritmos
LIA - Linguagem Interpretada de AlgoritmosLIA - Linguagem Interpretada de Algoritmos
LIA - Linguagem Interpretada de AlgoritmosRafael Martins
 
Implementação de Aplicações Móveis e Jogos com Python - Aula 1
Implementação de Aplicações Móveis e Jogos com Python - Aula 1Implementação de Aplicações Móveis e Jogos com Python - Aula 1
Implementação de Aplicações Móveis e Jogos com Python - Aula 1Flávio Ribeiro
 
Análise exploratória e modelação com R parte 1
Análise exploratória e modelação com R parte 1Análise exploratória e modelação com R parte 1
Análise exploratória e modelação com R parte 1Lucas Castro
 
Aula 01 Logica de Programacao - Logica Matematica 1.pdf
Aula 01 Logica de Programacao - Logica Matematica 1.pdfAula 01 Logica de Programacao - Logica Matematica 1.pdf
Aula 01 Logica de Programacao - Logica Matematica 1.pdfEizoKato
 
Aula 01 Logica de Programacao - Logica Matematica 1.pdf
Aula 01 Logica de Programacao - Logica Matematica 1.pdfAula 01 Logica de Programacao - Logica Matematica 1.pdf
Aula 01 Logica de Programacao - Logica Matematica 1.pdfEizoKato
 
Curso Completo de Linguagem de Programação C
Curso Completo de Linguagem de Programação CCurso Completo de Linguagem de Programação C
Curso Completo de Linguagem de Programação CJoberthSilva
 
Python com r (mini projeto)
Python com r (mini projeto)Python com r (mini projeto)
Python com r (mini projeto)Danilo Costa
 
Introdução à programação
Introdução à programaçãoIntrodução à programação
Introdução à programação12anogolega
 

Semelhante a Mini R (20)

Estrutura de linguagem de programação - Aula 2.pptx
Estrutura de linguagem de programação - Aula 2.pptxEstrutura de linguagem de programação - Aula 2.pptx
Estrutura de linguagem de programação - Aula 2.pptx
 
R para Iniciantes
R para IniciantesR para Iniciantes
R para Iniciantes
 
Introdução a Linguagem C
Introdução a Linguagem CIntrodução a Linguagem C
Introdução a Linguagem C
 
Cartilha de R para Estatística e Data Science.pdf
Cartilha de R para Estatística e Data Science.pdfCartilha de R para Estatística e Data Science.pdf
Cartilha de R para Estatística e Data Science.pdf
 
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop PythonIEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
 
Linguagem C 01 Primeiros Passos
Linguagem C 01 Primeiros PassosLinguagem C 01 Primeiros Passos
Linguagem C 01 Primeiros Passos
 
Estruturação de Linguagens de Programação (Pascal e C++)
Estruturação de Linguagens de Programação (Pascal e C++)Estruturação de Linguagens de Programação (Pascal e C++)
Estruturação de Linguagens de Programação (Pascal e C++)
 
Algoritmos e Programação: Apresentação da ferramenta de programação. Comandos...
Algoritmos e Programação: Apresentação da ferramenta de programação. Comandos...Algoritmos e Programação: Apresentação da ferramenta de programação. Comandos...
Algoritmos e Programação: Apresentação da ferramenta de programação. Comandos...
 
Linguagem R
Linguagem RLinguagem R
Linguagem R
 
LIA - Linguagem Interpretada de Algoritmos
LIA - Linguagem Interpretada de AlgoritmosLIA - Linguagem Interpretada de Algoritmos
LIA - Linguagem Interpretada de Algoritmos
 
Implementação de Aplicações Móveis e Jogos com Python - Aula 1
Implementação de Aplicações Móveis e Jogos com Python - Aula 1Implementação de Aplicações Móveis e Jogos com Python - Aula 1
Implementação de Aplicações Móveis e Jogos com Python - Aula 1
 
Linguagem c parte 1
Linguagem c parte 1Linguagem c parte 1
Linguagem c parte 1
 
Análise exploratória e modelação com R parte 1
Análise exploratória e modelação com R parte 1Análise exploratória e modelação com R parte 1
Análise exploratória e modelação com R parte 1
 
Aula 01 Logica de Programacao - Logica Matematica 1.pdf
Aula 01 Logica de Programacao - Logica Matematica 1.pdfAula 01 Logica de Programacao - Logica Matematica 1.pdf
Aula 01 Logica de Programacao - Logica Matematica 1.pdf
 
Aula 01 Logica de Programacao - Logica Matematica 1.pdf
Aula 01 Logica de Programacao - Logica Matematica 1.pdfAula 01 Logica de Programacao - Logica Matematica 1.pdf
Aula 01 Logica de Programacao - Logica Matematica 1.pdf
 
Curso Completo de Linguagem de Programação C
Curso Completo de Linguagem de Programação CCurso Completo de Linguagem de Programação C
Curso Completo de Linguagem de Programação C
 
Python com r (mini projeto)
Python com r (mini projeto)Python com r (mini projeto)
Python com r (mini projeto)
 
Introdução à programação
Introdução à programaçãoIntrodução à programação
Introdução à programação
 
Aula 1 | Introdução a C++
Aula 1 | Introdução a C++Aula 1 | Introdução a C++
Aula 1 | Introdução a C++
 
Python Emsl2009
Python Emsl2009Python Emsl2009
Python Emsl2009
 

Mini R

  • 1. R Introdução – Semana da Computação da UFJF – Leonardo Goliatt Depto Mecânica Aplicada e Computacional UFJF leonardo.goliatt@ufjf.edu.br 2012 Outubro/16 http://bit.ly/WiheUu 1 / 110
  • 2. Programa Informações Preliminares Linguagem R Análise de Casos Interface com Outras Linguagens 2 / 110
  • 3. Conteúdo Informações Preliminares Sobre o R Interface R Linguagem R Informações Preliminares Sintaxe do R Símbolos Vetores Instruções de Controle Funções Operadores Estruturas de dados Objetos e Classes Gráficos Pacotes e Dados do R Análise de Casos Ajuste de Curvas Vazão da Represa de Furnas Análise de Adubação da Soja Computação Simbólica no R Interface com Outras Linguagens R e outras Linguagens de Programação Combinando R com C e Fortran 3 / 110
  • 5. O R e sua filosofia de trabalho R pode ser definido como um ambiente de programação com ferramentas para manipulação de dados cálculos e apresentação gráfica Como ambiente, entende-se um sistema coerente e totalmente planejado O R não é um software do tipo aplicativo a preocupação não é com amigabilidade, mas com flexibilidade capacidade de manipulação de dados realização de análises 4 / 110
  • 6. Sobre o R R é free R é open-source Qualquer pessoa tem liberdade para usar e modficar Quem usa R? Google Pfizer Merck Bank of America R possui mas de 1600 pacotes, entre eles: BiodiversityR (ecologia e meio ambiente) Emu (análise da fala) GenABEL (genoma humano) ... Deu no New York Times: http://nyti.ms/Wl12E4 5 / 110
  • 7. O que é o R? R é um programa para análise estatística e representação gráfica. Funções e resultados de análises são armazenados como objetos, permitindo: fácil modificação de funções construção de modelos R é flexível e personalizável Ideal para análise exploratória de dados Por outro lado, R é pouco eficiente para manipular grandes conjuntos de dados Pouco eficiente na execução de grandes laços (loops) quando comparado com outras linguagens com C, Fortran e C++ 6 / 110
  • 8. Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer exemplos claros e simples da funcionalidade e flexibilidade do R Estimular o aproveitamento do Software Livre, evitando as restrições de softwares comerciais e o uso não autorizado destes. 7 / 110
  • 9. Página Oficial do R Referência básica para usuários de R: http://www.r-project.org/ inclui programas para download listas de discussão documentação e ajuda Livros: R in a Nutshell The Art of R Programming Onde baixar (Linux, Windows, Mac): http://cran.fiocruz.br/ Ubuntu (Linux): sudo apt-get install r-base 8 / 110
  • 11. Como usar o R? Diretamente do terminal ou console (tela preta) Linux: konsole, xterm, gnome-terminal Usando interfaces gráficas Rstudio: http://rstudio.org/ Rkward: http://rkward.sourceforge.net/ Rcmdr: http://www.rcommander.com/ StatET: http://www.walware.de/goto/statet/ Outras interfaces: http://www.sciviews.org/_rgui/ 9 / 110
  • 12. Invocando o R na linha de comando Se estiver corretamente instalado, abra um terminal e digite R. O símbolo “>” indica que o R está esperando um comando 1> R version 2.13.1 (2011-07-08) 2> Copyright (C) 2011 The R Foundation for Statistical Computing 3> ISBN 3-900051-07-0 4> Platform: x86_64-pc-linux-gnu (64-bit) 5> 6> R é um software livre e vem sem GARANTIA ALGUMA. 7> Você pode redistribuí-lo sob certas circunstâncias. 8> Digite 'license()' ou 'licence()' para detalhes de distribuição. 9> 10> R é um projeto colaborativo com muitos contribuidores. 11> Digite 'contributors()' para obter mais informações e 12> 'citation()' para saber como citar o R em publicações. 13> 14> Digite 'demo()' para demonstrações, 'help()' para o sistema 15> de ajuda, ou 'help.start()' a ajuda em HTML no seu navegador. 16> Digite 'q()' para sair do R. 10 / 110
  • 13. Invocando o R na linha de comando Ajuda sobre algo sobre o que se deseja 1> apropos('help') # busca por comandos similares 2> [1] "help" "help.request" "help.search" "help.start" 3> apropos('mean') 4> [1] "colMeans" "kmeans" "mean" 5> [5] "mean.Date" "mean.default" "mean.difftime" 6> [9] "mean.POSIXlt" "rowMeans" "weighted.mean" Quando só se sabe o que procurar 1> help('mean') # help em modo texto 2> ?mean # o mesmo que help('mean') 3> help('mean',help_type='html') # help em modo html 11 / 110
  • 14. Invocando o R na linha de comando Para sair do programa, digite 1> quit() 2> Save workspace image? [y/n/c]: n 12 / 110
  • 15. Conteúdo Linguagem R Informações Preliminares Sintaxe do R Símbolos Vetores Instruções de Controle Funções Operadores Estruturas de dados Objetos e Classes Gráficos Pacotes e Dados do R 13 / 110
  • 16. Informações Preliminares Funcionamento básico: entre com uma expressão no console e digite <enter> a expressão é avaliada e o resultado impresso na tela Note que [1] sempre acompanha qualquer resultado 1 # Isto éum comentário 2 1 + 2 + 3 3 [1] 6 4 1 + 2 * 3 # outro comentário 5 [1] 7 6 (1 + 2) * 3 # ... 7 [1] 9 13 / 110
  • 17. Informações Preliminares R é case-sensitive: então A e a são símbolos diferentes e se referem a diferentes variáveis Comandos são separados por ponto e vírgula “;” O conjunto de símbolos dependem do idioma e do sistema operacional onde se roda o R (tecnicamente, o locale em uso) Todos os símbolos alfanuméricos são permitidos, incluindo “.” e “_” Comentários começam com “#” 1 # 2 A=2; a=banana 3 print(A) 4 [1] 2 5 print(a) 6 [1] banana 7 # 8 .num=45; print(.num+1) 9 [1] 46 14 / 110
  • 18. Informações Preliminares Como a maioria das linguagens de programação, R permite atribuir valores a variáveis A operação de atribuição tem a sintaxe objeto recebe valor Há dois operadores que atribuem valores a um objeto dessa maneira sinal de menor seguido de hífen: - sinal de igual: = 1 # Os dois operadores de atribuição - e = são equivalentes 2 a - 2 3 f - b = 5*a 4 print(a) 5 [1] 2 6 print(b) 7 [1] 10 8 print(f) 9 [1] 10 15 / 110
  • 19. Informações Preliminares Uma forma de atribuição menos usada é valor atribuído a objeto 1 # Outra forma, menos usual é 2 salsa -d -e 3 print(d) 4 [1] salsa 5 print(e) 6 [1] salsa 7 8 # Para saber mais 9 ?= 10 ?- 16 / 110
  • 20. Informações Preliminares Em R, todo resultado é interpretado como um vetor O “[1]” indica o índice do vetor No caso abaixo, os números entre colchetes indicam o índice do primeiro elemento de cada linha 1 # sequência de inteiros no intervalo [1,50] 2 1:50 3 [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 4 [23] 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 5 [42] 42 43 44 45 46 47 48 49 50 17 / 110
  • 21. Informações Preliminares 1 # Usando o R como calculadora 2 4+6 3 [1] 10 4 2+3*4 5 [1] 14 6 3/2+1 7 [1] 2.6 8 4*3**3 # potências são indicadas por ** ou ^ 9 [1] 108 10 11 # Outras funções 12 sqrt(2) 13 [1] 1.414214 14 sin(pi) # os ângulos são interpretados em radianos 15 [1] 1.224606e-16 # zero! 16 sqrt(sin(45*pi/180)) 17 [1] 0.8408964 18 log(1) # logaritmo neperiano (base e) 19 [1] 0 20 log(64,4) # base 4 21 [1] 3 18 / 110
  • 22. Conteúdo Linguagem R Informações Preliminares Sintaxe do R Símbolos Vetores Instruções de Controle Funções Operadores Estruturas de dados Objetos e Classes Gráficos Pacotes e Dados do R 19 / 110
  • 23. Sintaxe do R Vamos começar com uma visão geral do R È possível escrever quase qualquer expressão em R como uma função Porém, isso pode se tornar confuso e o R permite algumas sintaxes especiais A sintaxe básica envolve: Constantes números caracteres símbolos. Símbolos Operadores Operadores básicos e definidos pelo usuário Atribuição 19 / 110
  • 24. Sintaxe do R Vetores numéricos 1 # Números são interpretados literalmente 2 1.1 3 [1] 1.1 4 2^1023 5 [1] 8.988466e+307 6 7 # Valores em notação hexadecimal comecam com 0x 8 0x1 9 [1] 1 10 0xFFFF 11 [1] 65535 12 13 # Qualquer número éinterpretado como ponto flutuante de dupla precisão 14 typeof(1) 15 [1] double 16 ?typeof # mais sobre a função typeof() 17 typeof(as(1,integer)) # se deseja um inteiro, use a função as 18 [1] integer 20 / 110
  • 25. Sintaxe do R Vetores numéricos 1 # Limites de precisão 2 (2^1023 + 1) == 2^1023 # 2^1023 éo máximo de precisão 3 [1] TRUE 4 # Limites de tamanho 5 2^1024 6 [1] Inf # o universo so existe até 2^1023 7 8 # R suporta complexos, escritos como (real) + (imaginário)i 9 0+1i ^ 2 10 [1] -1+0i 11 sqrt(-1+0i) 12 [1] 0+1i 13 exp(0+1i * pi) 14 [1] -1+0i 15 16 # A função sqrt() retorna um valor do mesmo tipo de entrada 17 sqrt(-1) 18 [1] NaN 19 Warning message: 20 In sqrt(-1) : NaNs produced 21 / 110
  • 26. Sintaxe do R Vetores numéricos 1 # O operador a:b retorna uma sequência de inteiros no intervalo [a,b] 2 1:5 3 [1] 1 2 3 4 5 4 typeof(1:5) 5 [1] integer 6 7 # Para combinar um conjunto de números em um vetor, use a função c() 8 v - c(173,12,1.12312,-93) 9 print(v) 10 [1] 173.00000 12.00000 1.12312 -93.0000000 11 12 # Em R, c se refere a função primitiva c(), porém você pode redefinitr c 13 c - 3 14 c 15 [1] 3 16 # mesmo após redefinir c, você pode combinar números 17 v - c(3,2,1) 18 v 19 [1] 3 2 1 22 / 110
  • 27. Sintaxe do R Caracteres 1 # Um caracter contém texto entre duas aspas 2 y - abc 3 y 4 [1] abc 5 length(y) # tamanho de y 6 [1] 1 7 mode(y) # equivalente a typeof() 8 [1] character 9 10 # Um vetor de caracteres 11 z - c(abc,29 88) 12 length(z) 13 [1] 2 14 mode(z) 15 [1] character 23 / 110
  • 28. Sintaxe do R Caracteres 1 # Concatenação de caracteres ... 2 u - paste(abc,de,f) # concatena as strings 3 u 4 [1] abc de f 5 # ... e separação (split) 6 v - strsplit(u,.) # divide em função dos espaços 7 v 8 [[1]] 9 [1] abc de f 10 11 # Outra forma de concaternar ... 12 u - paste(abc,de,f,sep=.) # usa . como separador 13 u 14 [1] abc.de.f 15 # ... e separar 16 strsplit(u,) 17 [[1]] 18 [1] a b c . d e . f 24 / 110
  • 29. Conteúdo Linguagem R Informações Preliminares Sintaxe do R Símbolos Vetores Instruções de Controle Funções Operadores Estruturas de dados Objetos e Classes Gráficos Pacotes e Dados do R 25 / 110
  • 30. Símbolos Um símbolo é um objeto que se refere a outro objeto 1 # Símbolo éo nome da variável em R 2 x1 - 1 3 X1 - 2 4 x1 5 [1] 1 6 X1 7 [1] 2 8 x1.1 - 1 9 x1.1_1 - 1 10 11 # Se necessário (!?), defina um símbolo assim: 12 1+2=3 - hello 13 1+2=3 14 [1] hello 15 16 # Nem todas as palavras são símbolos (palavras reservadas) 17 # -- if, else, repeat, while, function, for, in, next, break 18 # -- TRUE, FALSE, NULL, Inf, NaN, NA 19 # -- ... 25 / 110
  • 31. Símbolos Funções Uma função é uma outra forma de atribuir valor a um símbolo 1 # Atribui a função vetorial c(x+1, y+1) ao símbolo f 2 f - function(x,y) {c(x+1, y+1)} 3 f(1,2) 4 [1] 2 3 5 # Para visualizar o conteúdo de f 6 f 7 function(x,y) {c(x+1, y+1)} 8 9 # Visualizando o conteúdo da função desvio padrão 10 sd 11 function (x, na.rm = FALSE) 12 { 13 if (is.matrix(x)) 14 apply(x, 2, sd, na.rm = na.rm) 15 else if (is.vector(x)) 16 sqrt(var(x, na.rm = na.rm)) 17 else if (is.data.frame(x)) 18 sapply(x, sd, na.rm = na.rm) 19 else sqrt(var(as.vector(x), na.rm = na.rm)) 20 } 26 / 110
  • 32. Conteúdo Linguagem R Informações Preliminares Sintaxe do R Símbolos Vetores Instruções de Controle Funções Operadores Estruturas de dados Objetos e Classes Gráficos Pacotes e Dados do R 27 / 110
  • 33. Vetores Operações básicas O comando c(), de “combinar” é a forma principal de criar vetores 1 # Criando objetos 2 x- c(1,2,3); print(x) 3 [1] 1 2 3 4 y- 5:9; print(y) # aqui temos uma sequência 5 [1] 5 6 7 8 9 6 z-c(x,y); print(z) # x e y são aglutinados em z 7 [1] 1 2 3 5 6 7 8 9 8 9 # Listando os elementos no espaço de trabalho 10 ls() 11 [1] x y z 12 13 # Apagando alguns deles 14 rm(x,y) 15 16 # Listando novamente 17 ls() 18 [1] z 19 20 rm(list=ls()) # apaga tudo 27 / 110
  • 34. Vetores Operações básicas 1 # soma de vetores 2 c(1,2,3) + c(1,1,1) 3 [1] 2 3 4 4 # se não têm o mesmo tamanho, a menor sequência érepetida 5 c(1, 2, 3, 4) + 1 6 [1] 2 3 4 5 7 8 # o mesmo vale para divisão 9 1 / c(1, 2, 3, 4, 5) 10 [1] 1.0000000 0.5000000 0.3333333 0.2500000 0.2000000 11 12 # no caso abaixo, a menor sequência tem tamanho 2 13 c(1, 2, 3, 4) + c(10, 100) 14 [1] 11 102 13 104 15 16 # a primeira sequência não émúltipla da segunda: 5 não émútiplo de 2 17 c(1, 2, 3, 4, 5) + c(10, 100) 18 [1] 11 102 13 104 15 19 Mensagens de aviso perdidas: 20 In c(1, 2, 3, 4, 5) + c(10, 100) : 21 comprimento do objeto maior não émúltiplo do comprimento do objeto menor 28 / 110
  • 35. Vetores Operações básicas 1 # Em R podemos entrar com expressões de caracteres 2 Hello world. 3 [1] Hello world. 4 5 # Um vetor de caracteres de comprimento 3 6 c(Hello world, Hello R interpreter) 7 [1] Hello world 8 Hello R interpreter 29 / 110
  • 36. Vetores Operações básicas 1 # Formas de acessar os membros de um vetor 2 b = c(1:10) 3 b 4 [1] 1 2 3 4 5 6 7 8 9 10 5 b[5] # acessa o 5o. elemento de b 6 [1] 5 7 b[2:7] # acessa uma fatia de b 8 [1] 2 3 4 5 6 7 9 b%%3 # resto da divisão por 3 10 [1] 1 2 0 1 2 0 1 2 0 1 11 12 # A operação abaixo retorna um vetor lógico 13 b%%3==0 14 [1] FALSE FALSE TRUE FALSE FALSE TRUE FALSE FALSE TRUE FALSE 15 16 # Elementos de b congruentes de 0 (mod 3) 17 b[b%%3==0] 18 [1] 3 6 9 19 # 20 b[c(2,6,9)] 21 [1] 2 6 9 30 / 110
  • 37. Conteúdo Linguagem R Informações Preliminares Sintaxe do R Símbolos Vetores Instruções de Controle Funções Operadores Estruturas de dados Objetos e Classes Gráficos Pacotes e Dados do R 31 / 110
  • 38. Instruções de Controle As instruções de controle em R são muito similares àquelas de C, C++, Perl e Python Aqui vamos focar nos laços (loops) e condicionais (if-else) 1 # Python-like for: uma iteração para cada elemento 2 x - c(5,12,13) 3 for (n in x){ 4 + y = x/10 5 + print(n^2+y) 6 + } 7 [1] 25.5 8 [1] 144.12 9 [1] 169.13 10 11 # O mesmo vale para listas 12 l=list(p=21,k=c(1,2,3),z=NaN, f=function(a){return(a^2)}) 13 for(x in l) print(x) 14 [1] 21 15 [1] 1 2 3 16 [1] NaN 17 function(a){return(a^2)} 31 / 110
  • 39. Instruções de Controle 1 # C-style while 2 i - 1 3 while (i = 10) i - i+4 4 i 5 [1] 13 6 7 # Funcionamento básico do if 8 if (r == 4) { 9 + x - 1 10 +} else { 11 + x - 3 12 + y - 4 13 +} 14 15 # Duas formas de representar a mesma operação 16 x - 1 17 y - if(x == 2) x else x+1 18 y 19 [1] 2 20 if(x == 2) y - x else y - x+1 21 y 22 [1] 2 32 / 110
  • 40. Conteúdo Linguagem R Informações Preliminares Sintaxe do R Símbolos Vetores Instruções de Controle Funções Operadores Estruturas de dados Objetos e Classes Gráficos Pacotes e Dados do R 33 / 110
  • 41. Funções Em R, as operações que fazem todo o trabalho são chamadas funções 1 # Funções com 1 argumento 2 exp(1) 3 [1] 2.718282 4 cos(3.141593) 5 [1] -1 6 7 # Alguns argumentos podem ser especificados pelo nome 8 log(x=64, base=4) 9 [1] 3 10 11 # O comando seq() possui vários argumento opcionais 12 seq(from=0,to=10,by=0.8) # intervalo 13 [1] 0.0 0.8 1.6 2.4 3.2 4.0 4.8 5.6 6.4 7.2 8.0 8.8 9.6 14 seq(from=0,to=10,length=20) # comprimento 15 [1] 0.0000000 0.5263158 1.0526316 1.5789474 2.1052632 2.6315789 16 [7] 3.1578947 3.6842105 4.2105263 4.7368421 5.2631579 5.7894737 17 [13] 6.3157895 6.8421053 7.3684211 7.8947368 8.4210526 8.9473684 18 [19] 9.4736842 10.000000 33 / 110
  • 42. Funções Nem todas as funções têm a forma f (x1,x2,....) Algumas aparecem na forma de operadores 1 17 + 2 2 [1] 19 3 2 ^ 10 4 [1] 1024 5 3 == 4 6 [1] FALSE 34 / 110
  • 43. Funções Assim como em qualquer linguagem de programação, o cerne do R consiste em escrever funções Uma função é um grupo de instruções que recebe as entradas, opera sobre elas e retorma uma saída 1 # Conta o número de números ímpares em um vetor de inteiros 2 oddcount - function(x) 3 + k - 0 # o + indica continuação de linha 4 + for (n in x) { 5 + if (n %% 2 == 1) k 6 + } 7 + return(k) # o função retorna alguma coisa 8 + } 9 10 oddcount(c(1,3,5)) 11 [1] 3 12 oddcount(c(1,2,3,7,9)) 13 [1] 4 35 / 110
  • 44. Funções Variáveis criadas fora da função são globais e visíveis pela função 1 f - function(x) return(x+y) 2 y - 3 3 f(5) 4 [1] 8 Entradas podem ter um valor default 1 f - function(x,y=10) return(x+y) 2 f(x=3) 3 [1] 13 4 f(x=3,y=3) 5 [1] 6 6 f(k=3) 7 Error in f(k = 3) : unused argument(s) (k = 3) 36 / 110
  • 45. Conteúdo Linguagem R Informações Preliminares Sintaxe do R Símbolos Vetores Instruções de Controle Funções Operadores Estruturas de dados Objetos e Classes Gráficos Pacotes e Dados do R 37 / 110
  • 46. Operadores Operadores básicos Um operador é uma função que toma um ou mais argumentos e pode ser escrita sem parênteses 1 x - -1:5 2 x 3 [1] -1 0 1 2 3 4 5 4 5 # adição e multiplicação 6 2 * x + 3 7 [1] 1 3 5 7 9 11 13 8 # exponenciação 9 x^3 10 [1] -1 0 1 8 27 64 125 11 12 # resto da divisão (módulo) 13 x %% 2 #-- éperiódico 14 [1] 1 0 1 0 1 0 1 15 16 # divisão inteira 17 x %/% 5 # x %/% 5 == floor(x/5) 18 [1] -1 0 0 0 0 0 1 37 / 110
  • 47. Operadores Operadores definidos pelo usuário 1 # Você pode definir seus próprios operadores 2 # Vamos definir o operador %myop% através de uma função 3 4 %myop% - function(a, b) {2*a + b} 5 1 %myop% 1 6 [1] 3 7 1 %myop% 2 8 [1] 4 9 10 c(1,2,3,4,5) %myop% 2 11 [1] 4 6 8 10 12 12 13 # Atribuição éum operador 14 x - c(1,2,3,4,5) 15 16 # O negativo também éum operador 17 -7 18 [1] -7 19 20 # O ponto de interrogação ? (help) também éum operador 21 ?? 38 / 110
  • 48. Operadores Atribuição 1 # As operações de atribuição atribuem um objeto a um símbolo 2 3 # Vetor atribuído a um símbolo 4 v - c(1,2,3,4,5,6,7,8) 5 6 # Objeto lista atribuída a um símbolo 7 y - list(sapato=mocassim, chapeu=gorro, camisa=polo) 8 y 9 $sapato 10 [1] mocassim 11 12 $chapeu 13 [1] gorro 14 15 $camisa 16 [1] polo 17 18 # Objeto função atribuído a um símbolo 19 z - function(a,b,c) {a ^ b / c} 20 z 21 function(a,b,c) {a ^ b / c} 39 / 110
  • 49. Conteúdo Linguagem R Informações Preliminares Sintaxe do R Símbolos Vetores Instruções de Controle Funções Operadores Estruturas de dados Objetos e Classes Gráficos Pacotes e Dados do R 40 / 110
  • 50. Introdução as estruturas de dados Em R, podemos construir estruturas de dados mais complicadas do que vetores Alguns casos arrays listas dataframes ... 40 / 110
  • 51. Estruturas de dados Arrays 1 # Um array éum vetor multidimensional 2 a - array(c(1,2,3,4,5,6,7,8,9,10,11,12),dim=c(3,4)) 3 a 4 [,1] [,2] [,3] [,4] 5 [1,] 1 4 7 10 6 [2,] 2 5 8 11 7 [3,] 3 6 9 12 8 # Para acessar o elemento [2,2] 9 a[2,2] 10 [1] 5 11 # Veja como fica um vetor com o mesmo conteúdo 12 v - c(1,2,3,4,5,6,7,8,9,10,11,12); v 13 [1] 1 2 3 4 5 6 7 8 9 10 11 12 41 / 110
  • 52. Estruturas de dados Arrays 1 # Relembrando do array a, podemos acessá-lo de diferentes formas 2 a 3 [,1] [,2] [,3] [,4] 4 [1,] 1 4 7 10 5 [2,] 2 5 8 11 6 [3,] 3 6 9 12 7 8 # Somente a primeira linha 9 a[1,] 10 [1] 1 4 7 10 11 # Somente a primeira coluna 12 a[,1] 13 [1] 1 2 3 14 15 # Acessando uma fatia das linhas 16 a[1:2,] 17 [,1] [,2] [,3] [,4] 18 [1,] 1 4 7 10 19 [2,] 2 5 8 11 42 / 110
  • 53. Estruturas de dados Arrays 1 # Relembrando do array a mais uma vez 2 a 3 [,1] [,2] [,3] [,4] 4 [1,] 1 4 7 10 5 [2,] 2 5 8 11 6 [3,] 3 6 9 12 7 8 # Acessando um conjunto não contíguo colunas 9 a[,c(1,3)] # mostra somente as colunas 1 e 3 10 [,1] [,2] 11 [1,] 1 7 12 [2,] 2 8 13 [3,] 3 9 14 15 # O sinal negativo exclui linhas ou colunas 16 a[-c(1,3),] # exclui linhas 1 e 3 17 [1] 2 5 8 11 18 a[-2,-c(1,4)] # exclui linha 2 e colunas 1 e 4 19 [,1] [,2] 20 [1,] 4 7 21 [2,] 6 9 43 / 110
  • 54. Estruturas de dados Arrays 1 # Uma matriz éum array bidimensional 2 m - matrix(data=c(1,2,3,4,5,6,7,8,9,10,11,12),nrow=3,ncol=4) 3 m 4 [,1] [,2] [,3] [,4] 5 [1,] 1 4 7 10 6 [2,] 2 5 8 11 7 [3,] 3 6 9 12 8 9 # O comando matrix(() preenche as colunas com os dados fornecidos 10 matrix(1:6,nrow=2) 11 [,1] [,2] [,3] 12 [1,] 1 3 5 13 [2,] 2 4 6 14 15 # O preencimento por linhas também épossível 16 matrix(1:6,nrow=2, byrow=TRUE) 17 [,1] [,2] [,3] 18 [1,] 1 2 3 19 [2,] 4 5 6 44 / 110
  • 55. Estruturas de dados Arrays 1 # Uma outra forma de criar uma matriz éusando as funções 2 # -- rbind() 3 m - rbind(c(1,4),c(2,-3)) 4 m 5 [,1] [,2] 6 [1,] 1 4 7 [2,] 2 -3 8 9 # -- cbind() 10 n - cbind(c(1,4),c(2,-3)) 11 n 12 [,1] [,2] 13 [1,] 1 2 14 [2,] 4 -3 15 16 # --diag() 17 diag(2) 18 [,1] [,2] 19 [1,] 1 0 20 [2,] 0 1 45 / 110
  • 56. Estruturas de dados Arrays 1 # Além da soma e subtração, temos as operações 2 # -- multiplicação termo a termo 3 m * diag(2)*3 4 [,1] [,2] 5 [1,] 3 0 6 [2,] 0 -9 7 8 # -- divisão termo a termo 9 m/diag(2) 10 [,1] [,2] 11 [1,] 1 Inf 12 [2,] Inf -3 13 14 # -- produto matricial 15 m % * % n 16 [,1] [,2] 17 [1,] 17 -10 18 [2,] -10 13 46 / 110
  • 57. Estruturas de dados Arrays Atenção! 1 # O R pode operar com arrays de diferentes tamanhos, por conta do reuso dos vetores! 2 x=matrix(1:6,ncol=2) 3 x 4 [,1] [,2] 5 [1,] 1 4 6 [2,] 2 5 7 [3,] 3 6 8 9 # Aparentemente, a operação não faria sentido 10 x+c(1,2) 11 [,1] [,2] 12 [1,] 2 6 13 [2,] 4 6 14 [3,] 4 8 15 16 # Vamos vamos fazer algumas considerações... 47 / 110
  • 58. Estruturas de dados Arrays Atenção! 1 # Neste caso, ocorre a repetição dos valores, e a soma anterior éequivalente a 2 x + c(1,2,1,2,1,2) 3 [,1] [,2] 4 [1,] 2 6 5 [2,] 4 6 6 [3,] 4 8 7 8 # Observe a construção da matrix y, com c(1,2) repetido nas colunas 9 y=matrix(c(1,2,1,2,1,2),ncol=2) 10 y 11 [,1] [,2] 12 [1,] 1 2 13 [2,] 2 1 14 [3,] 1 2 15 x + y 16 [,1] [,2] 17 [1,] 2 6 18 [2,] 4 6 19 [3,] 4 8 48 / 110
  • 59. Estruturas de dados Arrays 1 # Arrays podem ter mais de uma dimensão 2 w - array(c(1:18),dim=c(3,3,2)) 3 print(w) 4 , , 1 5 6 [,1] [,2] [,3] 7 [1,] 1 4 7 8 [2,] 2 5 8 9 [3,] 3 6 9 10 11 , , 2 12 13 [,1] [,2] [,3] 14 [1,] 10 13 16 15 [2,] 11 14 17 16 [3,] 12 15 18 17 18 # Acessando um dos elementos 19 w[1,1,1] 20 [1] 1 49 / 110
  • 60. Estruturas de dados Listas Uma lista aceita a mistura de objetos de diferentes tipos 1 # Uma lista contendo um número e uma string 2 e - list(elemento=esfera, raio=8.25) 3 e 4 $elemento 5 [1] esfera 6 7 $raio 8 [1] 8.25 9 10 # Os objetos podem ser acessados de várias formas 11 e$elemento 12 [1] esfera 13 e[2] 14 $raio 15 [1] 8.25 16 17 e[[2]] 18 [1] 8.25 50 / 110
  • 61. Estruturas de dados Listas 1 # Uma lista pode referenciar outra lista 2 g - list(Essa lista referencia outra lista, e) 3 g 4 [[1]] 5 [1] Essa lista referencia outra lista 6 7 [[2]] 8 [[2]]$objeto 9 [1] esfera 10 11 [[2]]$raio 12 [1] 8.25 51 / 110
  • 62. Estruturas de dados Dataframes Um dataframe é um objeto que contém múltiplos vetores que são do mesmo tamanho é semelhante a uma planilha ou base de dados bons para representar dados experimentais 1 # As 6 cidades mais populosas do Brasil 2 cidade - c('São Paulo','Rio de Janeiro','Salvador','Brasília','Fortaleza', 'Belo ← Horizonte','Manaus') 3 estado - c('SP','RJ','BA','DF','CE','MG','AM') 4 pop - c(11376685,6390290,2710698,2648532,2500194,2395785,1861838) 5 6 # As informações estão armazenadas em vetores 7 cidade 8 [1] São Paulo Rio de Janeiro Salvador Brasília 9 [5] Fortaleza Belo Horizonte Manaus 10 estado 11 [1] SP RJ BA DF CE MG AM 12 pop 13 [1] 11376685 6390290 2710698 2648532 2500194 2395785 1861838 52 / 110
  • 63. Estruturas de dados Dataframes 1 # Armazenando em um dataframe 2 top6pop -data.frame(cidade,estado,pop) 3 top6pop 4 cidade estado pop 5 1 São Paulo SP 11376685 6 2 Rio de Janeiro RJ 6390290 7 3 Salvador BA 2710698 8 4 Brasília DF 2648532 9 5 Fortaleza CE 2500194 10 6 Belo Horizonte MG 2395785 11 7 Manaus AM 1861838 53 / 110
  • 64. Estruturas de dados Dataframes 1 # Acessando as informações contidas em top6pop 2 top6pop$estado 3 [1] SP RJ BA DF CE MG AM 4 Levels: AM BA CE DF MG RJ SP 5 # 6 top6pop[2] # outra forma de acessar os estados 7 estado 8 1 SP 9 2 RJ 10 3 BA 11 4 DF 12 5 CE 13 6 MG 14 7 AM 15 # 16 top6pop$pop 2.7e6 # cidades com mais de 2.7 mi hab 17 [1] TRUE TRUE TRUE FALSE FALSE FALSE FALSE 18 # 19 top6pop$pop[top6pop$pop2.7e6] # populações maiores que 2.7 mi hab 20 [1] 11376685 6390290 2710698 54 / 110
  • 65. Conteúdo Linguagem R Informações Preliminares Sintaxe do R Símbolos Vetores Instruções de Controle Funções Operadores Estruturas de dados Objetos e Classes Gráficos Pacotes e Dados do R 55 / 110
  • 66. Objetos e Classes R é uma linguagem orientada a objetos Cada objeto em R tem um tipo E cada objeto em R é membro de uma classe Já encontramos diferentes classes: vetores de caracteres, vetores numéricos, dataframes, listas, ... 1 class(1:10) 2 [1] integer 3 class(w) 4 [1] array 5 class(v) 6 [1] numeric 7 class(top6pop) 8 [1] data.frame 9 class(e) 10 [1] list 11 class(class) 12 [1] function 55 / 110
  • 67. Objetos e Classes Modelos e fórmulas Um modelo é uma forma concisa de descrever um conjunto de dados, usualmente por meio de uma fórmula matemática Algumas vezes o objetivo é construir um modelo preditivo baseado em dados disponíveis para avaliar novos dados Outras vezes o objetivo é constrir um modelo descritivo que auxilie no melhor entendimento dos dados O R possui uma notação específica para decrever relações entre variáveis Suponha uma variável y onde assumimos uma dependência linear de outras variáveis x1,x2,··· ,xn, resultando no modelo y = c1x1 +c2x2 +··· +cnxn +ε Em R, podemos escrever essa relação como um objeto fórmula 1 y ~ x1 + x2 + ... + xn 56 / 110
  • 68. Objetos e Classes Modelos e fórmulas Vamos analisar o seguinte exemplo 1 # Conjunto de 20 pontos com ruído que segue uma distribuição normal 2 set.seed(2) 3 x = seq(from=0,to=5,length=20) 4 y = 2*x - 3 + rnorm(20) # rnorm(): dist. normal 5 xy= data.frame(x,y) 6 xy 7 x y 8 1 0.0000000 -3.8969145 9 2 0.2631579 -2.2888350 10 ... 11 20 5.0000000 7.4322652 12 13 # lm() constroi um modelo y~x e atribui a variável xy.lm 14 # -- y : variável dependente 15 # -- x : variável independente 16 xy.lm = lm(formula=y~x, data=xy) 57 / 110
  • 69. Objetos e Classes Modelos e fórmulas 1 # Vamos analisar o objeto xy.lm (modelo linear) 2 xy.lm 3 4 Call: 5 lm(formula = y ~ x, data = xy) 6 7 Coefficients: 8 (Intercept) x 9 -2.926 2.049 10 11 # Observe os coeficiente e compare com o modelo y = 2*x - 3 + rnorm(20) 58 / 110
  • 70. Objetos e Classes Modelos e fórmulas 1 # Para maiores detalhes, use a função summary() 2 summary(xy.lm) 3 4 Call: 5 lm(formula = y ~ x, data = xy) 6 7 Residuals: 8 Min 1Q Median 3Q Max 9 -2.57694 -0.45741 0.04638 0.62709 1.80821 10 11 Coefficients: 12 Estimate Std. Error t value Pr(|t|) 13 (Intercept) -2.9261 0.4675 -6.259 6.65e-06 *** 14 x 2.0486 0.1598 12.816 1.74e-10 *** 15 --- 16 Signif. codes: 0 *** 0.001 ** 0.01 * 0.05 . 0.1 1 17 18 Residual standard error: 1.085 on 18 degrees of freedom 19 Multiple R-squared: 0.9012, Adjusted R-squared: 0.8957 20 F-statistic: 164.3 on 1 and 18 DF, p-value: 1.738e-10 59 / 110
  • 71. Objetos e Classes Modelos e fórmulas 1 # predict.lm() avalia os dados do dataframe xy no modelo xy.lm 2 xy.pr=predict.lm(xy.lm) 3 4 # Usamos algumas ferramentas gráficas para visualizar 5 plot(x,y,col='blue'); lines(x,xy.pr,col='red') 60 / 110
  • 72. Conteúdo Linguagem R Informações Preliminares Sintaxe do R Símbolos Vetores Instruções de Controle Funções Operadores Estruturas de dados Objetos e Classes Gráficos Pacotes e Dados do R 61 / 110
  • 73. Gráficos R inclui vários pacotes para a visualização de dados Se você é familiarizado com planilhas eletrônicas, vocÊ perceberá que o R pode gerar gráficos de barras gráficos de linhas histogramas gráficos de dispersão ... Vamos verificar alguns casos por meio de exemplos 61 / 110
  • 74. Gráficos 1 # Gráfico da função seno 2 x = seq(0,1,0.1) 3 y = sin(2*pi*x) 4 plot(x,y,type='b',col='darkgreen',main='Função seno',xlab='eixo-x', ← ylab='eixo-y',lwd=2) 62 / 110
  • 75. Gráficos 1 # Gráficos de funções paramétricas de uma variável 2 par(mfrow=c(1,2)) # uma linha e duas colunas 3 curve( 3*x^2+2*x+1, -1, 2,col=red,lwd=2) 4 curve(-3*x^2+2*x+1, -1, 2,col=blue,lwd=2) 63 / 110
  • 76. Gráficos 1 # Histograma de uma série dados com distribuição normal 2 x = rnorm(1000) 3 hist(x,col=yellow,breaks=40) 64 / 110
  • 77. Gráficos 1 # Um gráfico de barras 2 barplot(c(2,4,7,5,3,1),col='lightblue') 65 / 110
  • 78. Gráficos 1 # Gráfico de pizza 2 pie(1:6, col = rainbow(6), labels= LETTERS[1:6], radius = 0.9) 66 / 110
  • 79. Gráficos 1 # Gráfico de densidade 2 x = rnorm(200) 3 plot(density(x),col='red',lwd=2) 67 / 110
  • 80. Gráficos 1 # Boxplots 2 x - rnorm(200) # distribuição normal 3 y - rlnorm(200) # distribuição log-normal 4 plot(x, y, xlim=c(-5,5), ylim=c(-2,8)) 5 boxplot(x, col=gold , horizontal=TRUE, at=-1, add=TRUE) 6 boxplot(y, col=blue, horizontal=FALSE, at=-4, add=TRUE) 68 / 110
  • 81. Conteúdo Linguagem R Informações Preliminares Sintaxe do R Símbolos Vetores Instruções de Controle Funções Operadores Estruturas de dados Objetos e Classes Gráficos Pacotes e Dados do R 69 / 110
  • 82. Pacotes e Dados do R Dados O R possui pacotes de dados internos, usados principamente para demos e desenvolvimento de pacotes 1 # Os pacotes de dados disponíveis são listados através do comando 2 data() 3 Data sets in package 'datasets': 4 5 AirPassengers Monthly Airline Passenger Numbers 1949-1960 6 BJsales Sales Data with Leading Indicator 7 ... 8 volcano Topographic Information on Maunga Whau Volcano 9 warpbreaks The Number of Breaks in Yarn during Weaving 10 women Average Heights and Weights for American Women 11 12 13 Use data(package = .packages(all.available = TRUE)) 14 to list the data sets in all *available* packages. 69 / 110
  • 83. Pacotes e Dados do R Dados 1 # Para acessar um determinado conteúdo 2 data(trees) 3 trees 4 Girth Height Volume 5 1 8.3 70 10.3 6 2 8.6 65 10.3 7 ... 8 31 20.6 87 77.0 9 10 # Operando com os dados 11 class(trees) 12 [1] data.frame 13 mean(trees) 14 Girth Height Volume 15 13.24839 76.00000 30.17097 16 str(trees) # mostra informações sobre a estrututa do objeto 17 'data.frame': 31 obs. of 3 variables: 18 $ Girth : num 8.3 8.6 8.8 10.5 10.7 10.8 11 11 11.1 11.2 ... 19 $ Height: num 70 65 63 72 81 83 66 75 80 75 ... 20 $ Volume: num 10.3 10.3 10.2 16.4 18.8 19.7 15.6 18.2 22.6 19.9 ... 70 / 110
  • 84. Pacotes e Dados do R Dados 1 # Medidas do fluxo anual do Nilo na cidade de Ashwan 1871-1970 2 data(Nile) 3 Nile 4 Time Series: 5 Start = 1871 6 End = 1970 7 Frequency = 1 8 [1] 1120 1160 963 1210 1160 1160 813 1230 1370 1140 995 935 9 [13] 1110 994 1020 960 1180 799 958 1140 1100 1210 1150 1250 10 [25] 1260 1220 1030 1100 774 840 874 694 940 833 701 916 11 [37] 692 1020 1050 969 831 726 456 824 702 1120 1100 832 12 [49] 764 821 768 845 864 862 698 845 744 796 1040 759 13 [61] 781 865 845 944 984 897 822 1010 771 676 649 846 14 [73] 812 742 801 1040 860 874 848 890 744 749 838 1050 15 [85] 918 986 797 923 975 815 1020 906 901 1170 912 746 16 [97] 919 718 714 740 17 str(Nile) 18 Time-Series [1:100] from 1871 to 1970: 1120 1160 963 1210 1160 1160 813 1230 1370 ← 1140 ... 19 class(Nile) # objeto time series (série temporal) 20 [1] ts 71 / 110
  • 85. Pacotes e Dados do R Pacotes Um pacote é um conjunto de funções, arquivos de ajuda e arquivos de dados empacotados juntos Pacotes em R são similares aos modulos em Perl, bibliotecas em C e classes em Java Tipicamente, todas as funções em um pacote estão relacionadas entre si O pacote stats agrupa funções de análise estatística 1 # Carrega os pacote -- comandos equivalentes 2 library(stats) 3 require(stats) 4 5 # Para maiores informações 6 library(help=stats) 7 ?stats 72 / 110
  • 86. Pacotes e Dados do R Pacotes R oferece um grande número de pacotes Análise gráfica Aplicações industriais Ciências sociais .... Alguns pacotes veem com o R, outros são instalados através de repositórios 73 / 110
  • 87. Pacotes e Dados do R Pacotes 1 # Pacotes carregados automaticamente 2 getOption(defaultPackages) 3 [1] datasets utils grDevices graphics methods stats 4 5 # Pacotes disponíveis para serem carregados 6 (.packages(all.available=TRUE)) 7 [1] ade4 calibrate clusterSim corrgram 8 [6] Defaults ellipse gclus Hmisc 9 [11] nutshell quantmod R2HTML RColorBrewer 10 [16] seriation TSP TTR xts 11 [21] ape biclust bitops cba 12 [26] colorspace dataframes2xls e1071 emoa 13 14 # Instalação de pacotes -- repositórios online 15 install.packages('psy') 16 17 # Remoção de pacotes 18 remove.packages(c(tree, maptree),.Library) 74 / 110
  • 88. Conteúdo Análise de Casos Ajuste de Curvas Vazão da Represa de Furnas Análise de Adubação da Soja Computação Simbólica no R 75 / 110
  • 89. Ajuste de Curvas Vamos usar dados que relacionam a temperatura em graus Celsius com o valor da pressão de mercúrio. 1 # Carrega os dados 2 data(pressure) 3 head(pressure) 4 temperature pressure 5 1 0 0.0002 6 2 20 0.0012 7 3 40 0.0060 8 4 60 0.0300 9 5 80 0.0900 10 6 100 0.2700 11 12 pres = pressure$pressure # cria variáveis auxiliares 13 temp = pressure$temperature 14 plot(pres~temp, ylim=c(-50,400)) # gráfico dos dados 75 / 110
  • 90. Ajuste de Curvas 1 # Constrói os modelos 2 lm1=lm(pres~temp) # linear 3 lm2=lm(pres~temp + I(temp^2)) # quadrático 4 lm3=lm(pres~temp + I(temp^2)+ I(temp^3)) # cúbico 5 6 summary(lm1) 7 summary(lm2) 8 summary(lm3) 9 10 # Gráficos dos modelos 11 plot(pres~temp, ylim=c(-50,400),xlab='Temperatura',ylab='Pressão') 12 lines(predict(lm1)~temp,col='green') 13 lines(predict(lm2)~temp,col='red') 14 lines(predict(lm3)~temp,col='blue') 15 # Legenda 16 legend(x='topleft',legend=c('linear','quadrático','cúbico'),col=c(3,2,4),lwd=1) 76 / 110
  • 92. Conteúdo Análise de Casos Ajuste de Curvas Vazão da Represa de Furnas Análise de Adubação da Soja Computação Simbólica no R 78 / 110
  • 93. Vazão da Represa de Furnas Análise gráfica da série histórica (1931-2010) da vazão natural mensal da represa de Furnas Fonte: http://www.ons.org.br/operacao/vazoes_naturais.aspx Planilha eletrônica contendo as séries de vazões naturais médias mensais 78 / 110
  • 94. Vazão da Represa de Furnas 1 # 2 # Análise da série histórica das vazões mensais da barragens de Furnas 3 # Fonte: http://www.ons.org.br/operacao/vazoes_naturais.aspx 4 # 5 rm(list=ls()) # apaga todo o workspace 6 print(getwd()) # onde estamos? 7 8 9 # Dados das vazões na planilha 10 # Vazoes_Mensais_1931_2010.xls 11 # 12 library(gdata) # suporte para leitura de planilhas 13 v - read.xls(xls='./data/Vazoes_Mensais_1931_2010.xls',sheet=1) 14 View(v) 15 16 ano - v[ANO] # primeira coluna 17 vaz - v[,-1] # todos os dados exceto a 1a coluna 18 19 20 # Aplica a função média nas colunas de v 21 vaz.m - apply(vaz,2,mean) # médias das vazões mensais 22 View(vaz.m) 79 / 110
  • 95. Vazão da Represa de Furnas 1 # Análise gráfica das médias das vazões mensais 2 bp - barplot(vaz.m, ylim=c(0,1.2*max(vaz.m)), col=seagreen, 3 ylab=Vazão, las=3) 4 text(bp, vaz.m, label=round(vaz.m, 0), pos=3,srt=90, cex=0.8, offset=1.5) 5 title(Médias mensais das vazões de Furnas) 6 box() 80 / 110
  • 96. Vazão da Represa de Furnas 1 # Boxplots das vazões mensais 2 boxplot(vaz, las=3, col=steelblue, notch=1, ylab=Vazão, 3 main=Vazões mensais de Furnas) 4 points(vaz.m, col='red', lwd=1, pch=19) 5 lines(vaz.m, col='red', lwd=1) 81 / 110
  • 97. Vazão da Represa de Furnas 1 # Histograma das vazões mensais 2 vaz.t - unlist(vaz) 3 hist(vaz.t,breaks=20,freq=F,ylim=c(0,12e-4), ylab='Densidade', xlab='Vazão', 4 main='Histograma das Vazões', col='lightblue') 5 lines(density(vaz.t), col='red') 6 rug(vaz.t, col='red') 82 / 110
  • 98. Conteúdo Análise de Casos Ajuste de Curvas Vazão da Represa de Furnas Análise de Adubação da Soja Computação Simbólica no R 83 / 110
  • 99. Análise de Adubação da Soja Experimento em casa de vegetação com a cultura da soja, 2 plantas por parcela com: 3 níveis do fator conteúdo de do solo água (agua), 5 níveis do fator adubação potássica (potassio), parcelas arranjadas em 5 blocos (bloco). Foram observadas as seguintes variáveis: 1. rengrao : redimento de grãos 2. pesograo : peso de grãos 3. kgrao : conteúdo de potássio no grão 4. pgrao : conteúdo de fósforo no grão 5. ts : total de sementes por planta 6. nvi : número de vagens inviáveis 7. nv : número de vagens total Fonte: http://www.leg.ufpr.br/~walmes/ 83 / 110
  • 100. Análise de Adubação da Soja 1 # Leitura dos dados no arquivo soja.txt que encontra-se no diretório data 2 # 3 # Primeiro, devemos saber em que diretório estamos 4 getwd() 5 # Depois, devemos mudar para o diretório onde estão os dados 6 setwd('diretorio_onde_estao_os_dados') 7 # 8 # O comando read.table() lê o arquivo em formato de tabela e cria um 9 # dataframe a partir dele, com as entradas correspondendo às linhas 10 # e as variáveis correspondendo às colunas 11 # 12 soja - read.table('./data/soja.txt',header=TRUE) 13 14 View(soja) # visualização dos dados 15 16 # Algumas informações sobre os dados 17 class(soja) # classe do objeto 18 names(soja) # nomes das colunas 19 dim(soja) # dimensões 20 str(soja) # estrutura 21 head(soja) # cabeçalho 22 soja # imprime todos os registros 84 / 110
  • 101. Análise de Adubação da Soja 1 # Visualização rápida dos dados 2 head(soja) # cabeçalho 3 potassio agua bloco rengrao pesograo kgrao pgrao ts nvi nv 4 1 0 37.5 I 14.55 10.70 15.13 1.18 136 22 56 5 2 30 37.5 I 21.51 13.53 17.12 0.99 159 2 62 6 3 60 37.5 I 24.62 15.78 19.11 0.82 156 0 66 7 4 120 37.5 I 21.88 12.80 18.12 0.85 171 2 68 8 5 180 37.5 I 28.11 14.79 19.11 0.88 190 0 82 9 6 0 50.0 I 17.16 12.26 12.14 1.05 140 20 63 10 11 names(soja) 12 [1] potassio agua bloco rengrao pesograo kgrao pgrao ts 13 [9] nvi nv 85 / 110
  • 102. Análise de Adubação da Soja 1 # Acessando informações das variáveis ($) 2 3 soja$bloco # a variável bloco foi lida como um fator (variável categórica) 4 [1] I I I I I I I I I I I I I I I II II II 5 [24] II II II II II II II III III III III III III III III III III III 6 [47] IV IV IV IV IV IV IV IV IV IV IV IV IV IV V V V V 7 [70] V V V V V V 8 Levels: I II III IV V 9 10 soja$rengrao 11 [1] 14.55 21.51 24.62 21.88 28.11 17.16 24.44 28.50 32.94 28.76 14.13 19.71 12 [16] 15.72 19.72 24.29 25.39 28.45 15.44 28.12 31.49 29.95 30.06 15.42 23.68 13 [31] 12.77 20.45 24.35 27.15 24.08 16.01 24.57 28.85 26.23 26.36 16.08 20.99 14 [46] 14.26 23.71 22.76 22.46 22.97 15.54 18.48 25.54 30.29 30.64 17.26 20.51 15 [61] 10.30 16.28 23.61 29.66 23.34 14.41 17.24 29.08 29.52 27.98 17.56 20.05 16 17 soja$potassio # a variável potassio também écategórica, mas foi lida como numérica 18 [1] 0 30 60 120 180 0 30 60 120 180 0 30 60 120 180 0 30 60 19 [24] 120 180 0 30 60 120 180 0 30 60 120 180 0 30 60 120 180 0 20 [47] 30 60 120 180 0 30 60 120 180 0 30 60 120 180 0 30 60 120 21 [70] 180 0 30 60 120 180 86 / 110
  • 103. Análise de Adubação da Soja 1 # O comando attach() anexa a base de dados ao workspace do R 2 # 3 # Os objetos no banco de dados podem ser acessados simplesmente 4 # digitando seus nomes 5 6 attach(soja) 7 rengrao 8 [1] 14.55 21.51 24.62 21.88 28.11 17.16 24.44 28.50 32.94 28.76 9 ... 10 [73] 29.90 20.86 35.50 11 12 # Para desanexar a base de dados 13 detach(soja) 14 rengrao 15 Error: object 'rengrao' not found 87 / 110
  • 104. Análise de Adubação da Soja 1 # Exploração númerica, médias por nível de potássio, água e potássio:água 2 attach(soja) # anexa a base de dados 3 levels(factor(potassio)) # factor() transforma a variável em categórica e levels() ← extrai as categorias 4 [1] 0 30 60 120 180 5 6 tapply(rengrao,potassio,mean) # tapply() aplica um função a um grupo de valores de ← um array 7 0 30 60 120 180 8 15.10733 21.29733 27.48200 29.51067 30.43200 9 10 tapply(rengrao,list(agua),mean) 11 37.5 50 62.5 12 21.6956 25.1040 27.4980 13 14 tapply(rengrao,list(potassio,agua),mean) # médias de rendimento para potassio:agua 15 37.5 50 62.5 16 0 13.520 15.712 16.090 17 30 20.334 22.570 20.988 18 60 23.926 28.692 29.828 19 120 25.308 29.786 33.438 20 180 25.390 28.760 37.146 88 / 110
  • 105. Análise de Adubação da Soja 1 # O comando with avalia uma expressão em uma base de dados 2 # Assim, não precisamos anexar soja 3 4 # A mesma exploração numérica anterior 5 with(soja, tapply(rengrao, list(potassio), mean)) 6 0 30 60 120 180 7 15.10733 21.29733 27.48200 29.51067 30.43200 8 9 with(soja, tapply(rengrao, list(agua), mean)) 10 37.5 50 62.5 11 21.6956 25.1040 27.4980 12 13 with(soja, tapply(rengrao, list(potassio, agua), mean)) 14 37.5 50 62.5 15 0 13.520 15.712 16.090 16 30 20.334 22.570 20.988 17 60 23.926 28.692 29.828 18 120 25.308 29.786 33.438 19 180 25.390 28.760 37.146 89 / 110
  • 106. Análise de Adubação da Soja 1 # Selecionando subconjuntos dos dados de acordo com os níveis das categorias 2 subset(soja, potassio==0) 3 subset(soja, bloco==I) 4 subset(soja, potassio==0 bloco==I) 5 6 7 # Selecionando subconjunto dos dados por valores das respostas 8 subset(soja, rengrao15) 9 subset(soja, rengrao15 pesograo11) 90 / 110
  • 107. Análise de Adubação da Soja 1 # Gráficos simples de dispersão (rótulos, cores, simbolos, tamanhos) 2 plot(rengrao~potassio, data=subset(soja, agua==50)) 3 plot(rengrao~potassio, data=subset(soja, agua==50), 4 xlab=Dose de potássio, ylab=Rendimento de grãos, 5 col=2, pch=19, cex=1.2) 91 / 110
  • 108. Análise de Adubação da Soja 1 # Boxplot (subconjuntos e cores) 2 boxplot(rengrao~potassio, data=subset(soja, agua==50)) 3 boxplot(rengrao~potassio, data=soja, col=yellow) 92 / 110
  • 109. Análise de Adubação da Soja 1 # Todos níveis de água ao mesmo tempo (título) 2 par(mfrow=c(1,3)) # divide a janela gráfica em uma linha em três colunas 3 boxplot(rengrao~potassio, data=subset(soja, agua==37.5), ylim=c(10,45), main=37.5%) 4 boxplot(rengrao~potassio, data=subset(soja, agua==50 ), ylim=c(10,45), main=50.0%) 5 boxplot(rengrao~potassio, data=subset(soja, agua==62.5), ylim=c(10,45), main=62.5%) 93 / 110
  • 110. Análise de Adubação da Soja 1 # Gráficos de barras (adição de texto) 2 par(mfrow=c(1,1)) # restaura a janela gráfica 3 pot.m - with(soja, tapply(rengrao, potassio, mean)) 4 bp - barplot(pot.m) # alterar para ylim=c(0,32) 5 text(bp, pot.m, label=round(pot.m, 3), pos=3) # pos=3 6 title(Médias dos tratamentos) 7 box() 94 / 110
  • 111. Análise de Adubação da Soja 1 # Melhorando o aspecto 2 bp - barplot(pot.m, ylim=c(0,33), col=seagreen, 3 xlab=Dose de potássio, ylab=Rendimento médio de grãos) 4 text(bp, pot.m, label=round(pot.m, 3), pos=3, font=3) 5 title(Médias dos tratamentos) 6 box() 95 / 110
  • 112. Análise de Adubação da Soja 1 # Mais análise gráfica: rendimento em função de potassio para cada grupo de água 2 require(lattice) # biblioteca para gráficos mais elaborados 3 4 xyplot(rengrao~potassio, groups=agua, data=soja) 5 xyplot(rengrao~potassio, groups=agua, data=soja, type=c(p,a)) 6 xyplot(rengrao~potassio|agua, data=soja, type=c(p,a)) 7 xyplot(rengrao~potassio|agua, data=soja, type=c(p,smooth)) 96 / 110
  • 113. Conteúdo Análise de Casos Ajuste de Curvas Vazão da Represa de Furnas Análise de Adubação da Soja Computação Simbólica no R 97 / 110
  • 114. Computação Simbólica no R Em R podemos calcular as derivadas (simbólicas) de expressões simples 1 # Operações simbólicas com expressões simples 2 rm(list=ls()) # limpa o espaço de trabalho 3 4 # Cria uma expressão simbólica 5 f = expression(cos(x) + x * sin(x)) 6 class(f) 7 [1] expression 8 9 # Avalia a expressão, mas x ainda não exite... 10 eval(c) 11 Error in eval(expr, envir, enclos) : object 'x' not found 12 13 # Repetindo, mas agora com a criação de x 14 x=seq(0,pi,length=20) 15 eval(f) 16 [1] 1.00000000 1.01357652 1.05319340 1.11556315 1.19537338 1.28553021 17 [7] 1.37748586 1.46163791 1.52778475 1.56561949 1.56524303 1.51767600 18 [13] 1.41534884 1.25255020 1.02581462 0.73423276 0.37966969 -0.03311993 19 [19] -0.49648737 -1.00000000 97 / 110
  • 115. Computação Simbólica no R 1 # O grafico de f -- o rótulo de y éuma expressão 2 plot(ef~x,type='b', ylab=f, col='violetred4') 98 / 110
  • 116. Computação Simbólica no R 1 # Derivando f simbolicamente usando o comando D() 2 D(f) # faltou o x 3 Error in .Internal(D(expr, name)) : 'name' is missing 4 D(f,x) 5 sin(x) + x * cos(x) - sin(x) 6 7 # Para derivadas de ordem superior, definimos a função 8 DD - function(expr,name, order = 1) { 9 if(order 1) stop('order' must be = 1) 10 if(order == 1) D(expr,name) 11 else DD(D(expr, name), name, order - 1) 12 } 13 14 DD(f,x,1) 15 sin(x) + x * cos(x) - sin(x) 16 17 DD(f,x,2) 18 cos(x) + (cos(x) - x * sin(x)) - cos(x) 19 20 DD(f,x,4) 21 -(cos(x) + (cos(x) + (cos(x) - x * sin(x))) + cos(x) - cos(x)) 99 / 110
  • 117. Computação Simbólica no R 1 # Continuando com as derivadas de ordem superior 2 f4=DD(f,x,4) 3 f4 4 -(cos(x) + (cos(x) + (cos(x) - x * sin(x))) + cos(x) - cos(x)) 5 6 plot(eval(f4)~x, main=f4, type='b') # observe o título do gráfico 100 / 110
  • 118. Conteúdo Interface com Outras Linguagens R e outras Linguagens de Programação Combinando R com C e Fortran 101 / 110
  • 119. R e outras Linguagens de Programação Em R, podemos reutilizar códigos desenvolvidos em outras linguagens R e C (ou C++) R e Fortran R e Python (pacotes rpy, rpy2 e RSPython) R e Java (pacotes RJava e JRI) R e Perl (pacote RSPerl) R e MySQL (pacote RMySQL) 101 / 110
  • 120. Conteúdo Interface com Outras Linguagens R e outras Linguagens de Programação Combinando R com C e Fortran 102 / 110
  • 121. Combinando R com C e Fortran O R é relativamente lento em algoritmos iterativos que exigem laços (loops) repetidas vezes Uma maneira de obter todas as vantagens de velocidade de C ou Fortran com a maioria da conveniência de R é escrever o loop interno em C e chamá-lo de dentro do R Vamos considerar um problema bem simples, elevar ao quadradoos elementos de um vetor x = (x1,x2,...,xn−1,xn) q(x) = (x2 1 ,x2 2 ,...,x2 n−1,x2 n ) 102 / 110
  • 122. Combinando R com C e Fortran Aqui temos o código em linguagem C com uma solução para o problema O R exige duas proriedades da função: A função não retorna nenhum valor. Todo o trabalho é feito mudando os valores dos argumento. Todos os argumentos são ponteiros. Em R, mesmo escalares são vetores (de comprimento um). 1 /* pot2c.c */ 2 void pot2c(int *nin, double *x) 3 { 4 int n = nin[0]; 5 int i; 6 7 for (i=0; in; i++) 8 x[i] = x[i] * x[i]; 9 } 103 / 110
  • 123. Combinando R com C e Fortran Aqui temos o a mesma função em uma subrotina em Fortran Ela tem as mesmas duas propriedades da função em C: Ela não retorna valor, pois é uma subrotina. Funções (em Fortran) não são reconhecidas pelo R. A segunda proriedade é automática em Fortran. Fortran só aceita passagens de argumentos por referência, que corresponde aos ponteiros em C. 1 ! pot2f.f 2 subroutine pot2f(n, x) 3 4 integer n 5 double precision x(n) 6 integer i 7 8 do i = 1, n 9 x(i) = x(i) ** 2 10 enddo 11 12 end 104 / 110
  • 124. Combinando R com C e Fortran A compilação para a geração de bibliotecas dinâmicas, é feita em um terminal Linux, e portanto fora do R (e usando o proprio R) 1 # Compila o código em C 2 R CMD SHLIB pot2c.c 3 # Resultado do comando 4 # gcc -I/usr/share/R/include -fpic -std=gnu99 -O3 -pipe -g -c pot2c.c -o pot2c.o 5 # gcc -shared -o pot2c.so pot2c.o -L/usr/lib/R/lib -lR 6 7 8 # Compila o código em Fortran 9 R CMD SHLIB pot2f.f 10 # Resultado do comando 11 # gfortran -fpic -O3 -pipe -g -c pot2f.f -o pot2f.o 12 # gcc -shared -o pot2f.so pot2f.o -lgfortran -lm -lquadmath -L/usr/lib/R/lib -lR Se a compilação funcionar corretamente, serão gerados os arquivos pot2c.so e pot2f.so 105 / 110
  • 125. Combinando R com C e Fortran Voltando ao R, podemos carregar as bibliotecas 1 # Carregas as biblotecas geradas 2 dyn.load(pot2c.so) 3 dyn.load(pot2f.so) 4 5 # Verifica as bibliotecas carregadas com o comando getLoadedDLLs() 6 getLoadedDLLs() 7 Filename Dynamic.Lookup 8 base base FALSE 9 methods /usr/lib/R/library/methods/libs/methods.so FALSE 10 grDevices /usr/lib/R/library/grDevices/libs/grDevices.so FALSE 11 stats /usr/lib/R/library/stats/libs/stats.so FALSE 12 pot2c /tmp/pot2c.so TRUE 13 pot2f /tmp/pot2f.so TRUE 106 / 110
  • 126. Combinando R com C e Fortran Executando o função em C 1 # Para testar, vamos criar um vetor x 2 x=c(1,2,3,4,5) 3 x 4 [1] 1 2 3 4 5 5 6 typeof(x) # x deve ser double, assim como o argumento na função em C 7 [1] double 8 9 # A chamada da função em R éfeita pelo comando .C() 10 .C(pot2c, n=length(x), x=x) 11 $n 12 [1] 5 13 14 $x 15 [1] 1 4 9 16 25 107 / 110
  • 127. Combinando R com C e Fortran Executando o subrotina em Fortran 1 # A chamada da subrotina em R éfeita pelo comando .Fortran() 2 .Fortran(pot2f, n=length(x), x=x) 3 $n 4 [1] 5 5 6 $x 7 [1] 1 4 9 16 25 108 / 110
  • 128. Combinando R com C e Fortran Uma solução mais agradável é criar uma função envelope Permite checar alguns erros em R, o que é mais fácil que em C Permite que alguns argumento calculados não sejam mostrados Permite retornar somente o que o necessário 1 # Função envelope 2 pot2c - function(x) { 3 if (!is.numeric(x)) 4 stop(O argumento x deve ser numérico) 5 out - .C(pot2c, 6 n=as.integer(length(x)), 7 x=as.double(x)) 8 return(out$x) 9 } 10 11 # Executando a função 12 pot2c(x) 13 [1] 1 4 9 16 25 109 / 110