129
R Introdução – Semana da Computação da UFJF – Leonardo Goliatt Depto Mecânica Aplicada e Computacional UFJF 2012 Outubro/16 1 / 110

R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

RIntrodução

– Semana da Computação da UFJF –

Leonardo Goliatt

Depto Mecânica Aplicada e ComputacionalUFJF

[email protected]

2012 Outubro/16

1 / 110

Page 2: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Programa

Informações Preliminares

Linguagem R

Análise de Casos

Interface com Outras Linguagens

2 / 110

Page 3: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

ConteúdoInformações Preliminares

Sobre o RInterface R

Linguagem RInformações PreliminaresSintaxe do RSímbolosVetoresInstruções de ControleFunçõesOperadoresEstruturas de dadosObjetos e ClassesGráficosPacotes e Dados do R

Análise de CasosAjuste de CurvasVazão da Represa de FurnasAnálise de Adubação da SojaComputação Simbólica no R

Interface com Outras LinguagensR e outras Linguagens de ProgramaçãoCombinando R com C e Fortran

3 / 110

Page 4: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Conteúdo

Informações PreliminaresSobre o RInterface R

4 / 110

Page 5: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

O R e sua filosofia de trabalho

� R pode ser definido como um ambiente de programação comferramentas para� manipulação de dados� cálculos� e apresentação gráfica

� Como ambiente, entende-se um sistema coerente e totalmenteplanejado

� 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

Page 6: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

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

Page 7: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

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

Page 8: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Objetivos do minicurso

� Apresentar o ambiente de programação R contexto de simulação eanálise de dados

� Fornecer exemplos claros e simples da funcionalidade e flexibilidadedo R

� Estimular o aproveitamento do Software Livre, evitando as restriçõesde softwares comerciais e o uso não autorizado destes.

7 / 110

Page 9: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

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

Page 10: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Conteúdo

Informações PreliminaresSobre o RInterface R

9 / 110

Page 11: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

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

Page 12: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

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 Computing3> ISBN 3-900051-07-04> 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 e12> 'citation()' para saber como citar o R em publicações.13>14> Digite 'demo()' para demonstrações, 'help()' para o sistema15> de ajuda, ou 'help.start()' a ajuda em HTML no seu navegador.16> Digite 'q()' para sair do R.

10 / 110

Page 13: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Invocando o R na linha de comando� Ajuda sobre algo sobre o que se deseja

1> apropos('help') # busca por comandos similares2> [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 texto2> ?mean # o mesmo que help('mean')3> help('mean',help_type='html') # help em modo html

11 / 110

Page 14: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Invocando o R na linha de comando

� Para sair do programa, digite

1> quit()2> Save workspace image? [y/n/c]: n

12 / 110

Page 15: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Conteúdo

Linguagem RInformações PreliminaresSintaxe do RSímbolosVetoresInstruções de ControleFunçõesOperadoresEstruturas de dadosObjetos e ClassesGráficosPacotes e Dados do R

13 / 110

Page 16: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

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ário2> 1 + 2 + 33> [1] 64> 1 + 2 * 3 # outro comentário5> [1] 76> (1 + 2) * 3 # ...7> [1] 9

13 / 110

Page 17: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

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] 25> print(a)6> [1] "banana"7> #8> .num=45; print(.num+1)9> [1] 46

14 / 110

Page 18: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

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 equivalentes2> a <- 23> f <- b = 5*a4> print(a)5> [1] 26> print(b)7> [1] 108> print(f)9> [1] 10

15 / 110

Page 19: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Informações Preliminares

� Uma forma de atribuição menos usada é valor atribuído a objeto

1> # Outra forma, menos usual é2> "salsa" -d -e3> print(d)4> [1] "salsa"5> print(e)6> [1] "salsa"7>8> # Para saber mais9> ?"="

10> ?"<-"

16 / 110

Page 20: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

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:503> [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 224> [23] 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 415> [42] 42 43 44 45 46 47 48 49 50

17 / 110

Page 21: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Informações Preliminares

1> # Usando o R como calculadora2> 4+63> [1] 104> 2+3*45> [1] 146> 3/2+17> [1] 2.68> 4*3**3 # potências são indicadas por ** ou ^9> [1] 108

10>11> # Outras funções12> sqrt(2)13> [1] 1.41421414> sin(pi) # os ângulos são interpretados em radianos15> [1] 1.224606e-16 # zero!16> sqrt(sin(45*pi/180))17> [1] 0.840896418> log(1) # logaritmo neperiano (base e)19> [1] 020> log(64,4) # base 421> [1] 3

18 / 110

Page 22: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Conteúdo

Linguagem RInformações PreliminaresSintaxe do RSímbolosVetoresInstruções de ControleFunçõesOperadoresEstruturas de dadosObjetos e ClassesGráficosPacotes e Dados do R

19 / 110

Page 23: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

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

Page 24: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Sintaxe do RVetores numéricos

1> # Números são interpretados literalmente2> 1.13> [1] 1.14> 2^10235> [1] 8.988466e+3076>7> # Valores em notação hexadecimal comecam com "0x"8> 0x19> [1] 1

10> 0xFFFF11> [1] 6553512>13> # Qualquer número éinterpretado como ponto flutuante de dupla precisão14> 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

Page 25: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Sintaxe do RVetores numéricos

1> # Limites de precisão2> (2^1023 + 1) == 2^1023 # 2^1023 éo máximo de precisão3> [1] TRUE4> # Limites de tamanho5> 2^10246> [1] Inf # o universo so existe até 2^10237>8> # R suporta complexos, escritos como (real) + (imaginário)i9> 0+1i ^ 2

10> [1] -1+0i11> sqrt(-1+0i)12> [1] 0+1i13> exp(0+1i * pi)14> [1] -1+0i15>16> # A função sqrt() retorna um valor do mesmo tipo de entrada17> sqrt(-1)18> [1] NaN19> Warning message:20> In sqrt(-1) : NaNs produced

21 / 110

Page 26: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Sintaxe do RVetores numéricos

1> # O operador a:b retorna uma sequência de inteiros no intervalo [a,b]2> 1:53> [1] 1 2 3 4 54> 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.000000011>12> # Em R, c se refere a função primitiva c(), porém você pode redefinitr c13> c <- 314> c15> [1] 316> # mesmo após redefinir c, você pode combinar números17> v <- c(3,2,1)18> v19> [1] 3 2 1

22 / 110

Page 27: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Sintaxe do RCaracteres

1> # Um caracter contém texto entre duas aspas2> y <- "abc"3> y4> [1] "abc"5> length(y) # tamanho de y6> [1] 17> mode(y) # equivalente a typeof()8> [1] "character"9>

10> # Um vetor de caracteres11> z <- c("abc","29 88")12> length(z)13> [1] 214> mode(z)15> [1] "character"

23 / 110

Page 28: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Sintaxe do RCaracteres

1> # Concatenação de caracteres ...2> u <- paste("abc","de","f") # concatena as strings3> u4> [1] "abc de f"5> # ... e separação (split)6> v <- strsplit(u,".") # divide em função dos espaços7> v8> [[1]]9> [1] "abc" "de" "f"

10>11> # Outra forma de concaternar ...12> u <- paste("abc","de","f",sep=".") # usa . como separador13> u14> [1] "abc.de.f"15> # ... e separar16> strsplit(u,"")17> [[1]]18> [1] "a" "b" "c" "." "d" "e" "." "f"

24 / 110

Page 29: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Conteúdo

Linguagem RInformações PreliminaresSintaxe do RSímbolosVetoresInstruções de ControleFunçõesOperadoresEstruturas de dadosObjetos e ClassesGráficosPacotes e Dados do R

25 / 110

Page 30: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Símbolos� Um símbolo é um objeto que se refere a outro objeto

1> # Símbolo éo nome da variável em R2> x1 <- 13> X1 <- 24> x15> [1] 16> X17> [1] 28> x1.1 <- 19> 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, break18> # -- TRUE, FALSE, NULL, Inf, NaN, NA19> # -- ...

25 / 110

Page 31: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

SímbolosFunçõ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 f2> f <- function(x,y) {c(x+1, y+1)}3> f(1,2)4> [1] 2 35> # Para visualizar o conteúdo de f6> f7> function(x,y) {c(x+1, y+1)}8>9> # Visualizando o conteúdo da função desvio padrão

10> sd11> 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

Page 32: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Conteúdo

Linguagem RInformações PreliminaresSintaxe do RSímbolosVetoresInstruções de ControleFunçõesOperadoresEstruturas de dadosObjetos e ClassesGráficosPacotes e Dados do R

27 / 110

Page 33: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

VetoresOperações básicas� O comando c(), de “combinar” é a forma principal de criar vetores

1> # Criando objetos2> x<- c(1,2,3); print(x)3> [1] 1 2 34> y<- 5:9; print(y) # aqui temos uma sequência5> [1] 5 6 7 8 96> z<-c(x,y); print(z) # x e y são aglutinados em z7> [1] 1 2 3 5 6 7 8 98>9> # Listando os elementos no espaço de trabalho

10> ls()11> [1] "x" "y" "z"12>13> # Apagando alguns deles14> rm(x,y)15>16> # Listando novamente17> ls()18> [1] "z"19>20> rm(list=ls()) # apaga tudo

27 / 110

Page 34: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

VetoresOperações básicas

1> # soma de vetores2> c(1,2,3) + c(1,1,1)3> [1] 2 3 44> # se não têm o mesmo tamanho, a menor sequência érepetida5> c(1, 2, 3, 4) + 16> [1] 2 3 4 57>8> # o mesmo vale para divisão9> 1 / c(1, 2, 3, 4, 5)

10> [1] 1.0000000 0.5000000 0.3333333 0.2500000 0.200000011>12> # no caso abaixo, a menor sequência tem tamanho 213> c(1, 2, 3, 4) + c(10, 100)14> [1] 11 102 13 10415>16> # a primeira sequência não émúltipla da segunda: 5 não émútiplo de 217> c(1, 2, 3, 4, 5) + c(10, 100)18> [1] 11 102 13 104 1519> 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

Page 35: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

VetoresOperações básicas

1> # Em R podemos entrar com expressões de caracteres2> "Hello world."3> [1] "Hello world."4>5> # Um vetor de caracteres de comprimento 36> c("Hello world", "Hello R interpreter")7> [1] "Hello world"8> "Hello R interpreter"

29 / 110

Page 36: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

VetoresOperações básicas

1> # Formas de acessar os membros de um vetor2> b = c(1:10)3> b4> [1] 1 2 3 4 5 6 7 8 9 105> b[5] # acessa o 5o. elemento de b6> [1] 57> b[2:7] # acessa uma fatia de b8> [1] 2 3 4 5 6 79> b%%3 # resto da divisão por 3

10> [1] 1 2 0 1 2 0 1 2 0 111>12> # A operação abaixo retorna um vetor lógico13> b%%3==014> [1] FALSE FALSE TRUE FALSE FALSE TRUE FALSE FALSE TRUE FALSE15>16> # Elementos de b congruentes de 0 (mod 3)17> b[b%%3==0]18> [1] 3 6 919> #20> b[c(2,6,9)]21> [1] 2 6 9

30 / 110

Page 37: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Conteúdo

Linguagem RInformações PreliminaresSintaxe do RSímbolosVetoresInstruções de ControleFunçõesOperadoresEstruturas de dadosObjetos e ClassesGráficosPacotes e Dados do R

31 / 110

Page 38: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

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 elemento2> x <- c(5,12,13)3> for (n in x){4> + y = x/105> + print(n^2+y)6> + }7> [1] 25.58> [1] 144.129> [1] 169.13

10>11> # O mesmo vale para listas12> 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] 2115> [1] 1 2 316> [1] NaN17> function(a){return(a^2)}

31 / 110

Page 39: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Instruções de Controle

1> # C-style while2> i <- 13> while (i <= 10) i <- i+44> i5> [1] 136>7> # Funcionamento básico do if8> if (r == 4) {9> + x <- 1

10> +} else {11> + x <- 312> + y <- 413> +}14>15> # Duas formas de representar a mesma operação16> x <- 117> y <- if(x == 2) x else x+118> y19> [1] 220> if(x == 2) y <- x else y <- x+121> y22> [1] 2

32 / 110

Page 40: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Conteúdo

Linguagem RInformações PreliminaresSintaxe do RSímbolosVetoresInstruções de ControleFunçõesOperadoresEstruturas de dadosObjetos e ClassesGráficosPacotes e Dados do R

33 / 110

Page 41: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Funções� Em R, as operações que fazem todo o trabalho são chamadas

funções

1> # Funções com 1 argumento2> exp(1)3> [1] 2.7182824> cos(3.141593)5> [1] -16>7> # Alguns argumentos podem ser especificados pelo nome8> log(x=64, base=4)9> [1] 3

10>11> # O comando seq() possui vários argumento opcionais12> seq(from=0,to=10,by=0.8) # intervalo13> [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.614> seq(from=0,to=10,length=20) # comprimento15> [1] 0.0000000 0.5263158 1.0526316 1.5789474 2.1052632 2.631578916> [7] 3.1578947 3.6842105 4.2105263 4.7368421 5.2631579 5.789473717> [13] 6.3157895 6.8421053 7.3684211 7.8947368 8.4210526 8.947368418> [19] 9.4736842 10.000000

33 / 110

Page 42: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Funções

� Nem todas as funções têm a forma f (x1,x2, ....)

� Algumas aparecem na forma de operadores

1> 17 + 22> [1] 193> 2 ^ 104> [1] 10245> 3 == 46> [1] FALSE

34 / 110

Page 43: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

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 inteiros2> oddcount <- function(x)3> + k <- 0 # o + indica continuação de linha4> + for (n in x) {5> + if (n %% 2 == 1) k6> + }7> + return(k) # o função retorna alguma coisa8> + }9>

10> oddcount(c(1,3,5))11> [1] 312> oddcount(c(1,2,3,7,9))13> [1] 4

35 / 110

Page 44: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

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 <- 33> 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] 134> f(x=3,y=3)5> [1] 66> f(k=3)7> Error in f(k = 3) : unused argument(s) (k = 3)

36 / 110

Page 45: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Conteúdo

Linguagem RInformações PreliminaresSintaxe do RSímbolosVetoresInstruções de ControleFunçõesOperadoresEstruturas de dadosObjetos e ClassesGráficosPacotes e Dados do R

37 / 110

Page 46: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

OperadoresOperadores básicos� Um operador é uma função que toma um ou mais argumentos e

pode ser escrita sem parênteses

1> x <- -1:52> x3> [1] -1 0 1 2 3 4 54>5> # adição e multiplicação6> 2 * x + 37> [1] 1 3 5 7 9 11 138> # exponenciação9> x^3

10> [1] -1 0 1 8 27 64 12511>12> # resto da divisão (módulo)13> x %% 2 #-- éperiódico14> [1] 1 0 1 0 1 0 115>16> # divisão inteira17> x %/% 5 # x %/% 5 == floor(x/5)18> [1] -1 0 0 0 0 0 1

37 / 110

Page 47: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

OperadoresOperadores definidos pelo usuário

1> # Você pode definir seus próprios operadores2> # Vamos definir o operador %myop% através de uma função3>4> "%myop%" <- function(a, b) {2*a + b}5> 1 %myop% 16> [1] 37> 1 %myop% 28> [1] 49>

10> c(1,2,3,4,5) %myop% 211> [1] 4 6 8 10 1212>13> # Atribuição éum operador14> x <- c(1,2,3,4,5)15>16> # O negativo também éum operador17> -718> [1] -719>20> # O ponto de interrogação ? (help) também éum operador21> ?"?"

38 / 110

Page 48: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

OperadoresAtribuição

1> # As operações de atribuição atribuem um objeto a um símbolo2>3> # Vetor atribuído a um símbolo4> v <- c(1,2,3,4,5,6,7,8)5>6> # Objeto lista atribuída a um símbolo7> y <- list(sapato="mocassim", chapeu="gorro", camisa="polo")8> y9> $sapato

10> [1] "mocassim"11>12> $chapeu13> [1] "gorro"14>15> $camisa16> [1] "polo"17>18> # Objeto função atribuído a um símbolo19> z <- function(a,b,c) {a ^ b / c}20> z21> function(a,b,c) {a ^ b / c}

39 / 110

Page 49: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Conteúdo

Linguagem RInformações PreliminaresSintaxe do RSímbolosVetoresInstruções de ControleFunçõesOperadoresEstruturas de dadosObjetos e ClassesGráficosPacotes e Dados do R

40 / 110

Page 50: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Introdução as estruturas de dados

� Em R, podemos construir estruturas de dados mais complicadas doque vetores

� Alguns casos� arrays� listas� dataframes� ...

40 / 110

Page 51: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Estruturas de dadosArrays

1> # Um array éum vetor multidimensional2> a <- array(c(1,2,3,4,5,6,7,8,9,10,11,12),dim=c(3,4))3> a4> [,1] [,2] [,3] [,4]5> [1,] 1 4 7 106> [2,] 2 5 8 117> [3,] 3 6 9 128> # Para acessar o elemento [2,2]9> a[2,2]

10> [1] 511> # Veja como fica um vetor com o mesmo conteúdo12> v <- c(1,2,3,4,5,6,7,8,9,10,11,12); v13> [1] 1 2 3 4 5 6 7 8 9 10 11 12

41 / 110

Page 52: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Estruturas de dadosArrays

1> # Relembrando do array a, podemos acessá-lo de diferentes formas2> a3> [,1] [,2] [,3] [,4]4> [1,] 1 4 7 105> [2,] 2 5 8 116> [3,] 3 6 9 127>8> # Somente a primeira linha9> a[1,]

10> [1] 1 4 7 1011> # Somente a primeira coluna12> a[,1]13> [1] 1 2 314>15> # Acessando uma fatia das linhas16> a[1:2,]17> [,1] [,2] [,3] [,4]18> [1,] 1 4 7 1019> [2,] 2 5 8 11

42 / 110

Page 53: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Estruturas de dadosArrays

1> # Relembrando do array a mais uma vez2> a3> [,1] [,2] [,3] [,4]4> [1,] 1 4 7 105> [2,] 2 5 8 116> [3,] 3 6 9 127>8> # Acessando um conjunto não contíguo colunas9> a[,c(1,3)] # mostra somente as colunas 1 e 3

10> [,1] [,2]11> [1,] 1 712> [2,] 2 813> [3,] 3 914>15> # O sinal negativo exclui linhas ou colunas16> a[-c(1,3),] # exclui linhas 1 e 317> [1] 2 5 8 1118> a[-2,-c(1,4)] # exclui linha 2 e colunas 1 e 419> [,1] [,2]20> [1,] 4 721> [2,] 6 9

43 / 110

Page 54: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Estruturas de dadosArrays

1> # Uma matriz éum array bidimensional2> m <- matrix(data=c(1,2,3,4,5,6,7,8,9,10,11,12),nrow=3,ncol=4)3> m4> [,1] [,2] [,3] [,4]5> [1,] 1 4 7 106> [2,] 2 5 8 117> [3,] 3 6 9 128>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 513> [2,] 2 4 614>15> # O preencimento por linhas também épossível16> matrix(1:6,nrow=2, byrow=TRUE)17> [,1] [,2] [,3]18> [1,] 1 2 319> [2,] 4 5 6

44 / 110

Page 55: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Estruturas de dadosArrays

1> # Uma outra forma de criar uma matriz éusando as funções2> # -- rbind()3> m <- rbind(c(1,4),c(2,-3))4> m5> [,1] [,2]6> [1,] 1 47> [2,] 2 -38>9> # -- cbind()

10> n <- cbind(c(1,4),c(2,-3))11> n12> [,1] [,2]13> [1,] 1 214> [2,] 4 -315>16> # --diag()17> diag(2)18> [,1] [,2]19> [1,] 1 020> [2,] 0 1

45 / 110

Page 56: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Estruturas de dadosArrays

1> # Além da soma e subtração, temos as operações2> # -- multiplicação termo a termo3> m * diag(2)*34> [,1] [,2]5> [1,] 3 06> [2,] 0 -97>8> # -- divisão termo a termo9> m/diag(2)

10> [,1] [,2]11> [1,] 1 Inf12> [2,] Inf -313>14> # -- produto matricial15> m % * % n16> [,1] [,2]17> [1,] 17 -1018> [2,] -10 13

46 / 110

Page 57: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Estruturas de dadosArrays

� 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> x4> [,1] [,2]5> [1,] 1 46> [2,] 2 57> [3,] 3 68>9> # Aparentemente, a operação não faria sentido

10> x+c(1,2)11> [,1] [,2]12> [1,] 2 613> [2,] 4 614> [3,] 4 815>16> # Vamos vamos fazer algumas considerações...

47 / 110

Page 58: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Estruturas de dadosArrays� Atenção!

1> # Neste caso, ocorre a repetição dos valores, e a soma anterior éequivalente a2> x + c(1,2,1,2,1,2)3> [,1] [,2]4> [1,] 2 65> [2,] 4 66> [3,] 4 87>8> # Observe a construção da matrix y, com c(1,2) repetido nas colunas9> y=matrix(c(1,2,1,2,1,2),ncol=2)

10> y11> [,1] [,2]12> [1,] 1 213> [2,] 2 114> [3,] 1 215> x + y16> [,1] [,2]17> [1,] 2 618> [2,] 4 619> [3,] 4 8

48 / 110

Page 59: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Estruturas de dadosArrays

1> # Arrays podem ter mais de uma dimensão2> w <- array(c(1:18),dim=c(3,3,2))3> print(w)4> , , 15>6> [,1] [,2] [,3]7> [1,] 1 4 78> [2,] 2 5 89> [3,] 3 6 9

10>11> , , 212>13> [,1] [,2] [,3]14> [1,] 10 13 1615> [2,] 11 14 1716> [3,] 12 15 1817>18> # Acessando um dos elementos19> w[1,1,1]20> [1] 1

49 / 110

Page 60: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Estruturas de dadosListas� Uma lista aceita a mistura de objetos de diferentes tipos

1> # Uma lista contendo um número e uma string2> e <- list(elemento="esfera", raio="8.25")3> e4> $elemento5> [1] "esfera"6>7> $raio8> [1] "8.25"9>

10> # Os objetos podem ser acessados de várias formas11> e$elemento12> [1] "esfera"13> e[2]14> $raio15> [1] "8.25"16>17> e[[2]]18> [1] "8.25"

50 / 110

Page 61: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Estruturas de dadosListas

1> # Uma lista pode referenciar outra lista2> g <- list("Essa lista referencia outra lista", e)3> g4> [[1]]5> [1] "Essa lista referencia outra lista"6>7> [[2]]8> [[2]]$objeto9> [1] "esfera"

10>11> [[2]]$raio12> [1] "8.25"

51 / 110

Page 62: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Estruturas de dadosDataframes� 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 Brasil2> 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 vetores7> cidade8> [1] "São Paulo" "Rio de Janeiro" "Salvador" "Brasília"9> [5] "Fortaleza" "Belo Horizonte" "Manaus"

10> estado11> [1] "SP" "RJ" "BA" "DF" "CE" "MG" "AM"12> pop13> [1] 11376685 6390290 2710698 2648532 2500194 2395785 1861838

52 / 110

Page 63: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Estruturas de dadosDataframes

1> # Armazenando em um dataframe2> top6pop <-data.frame(cidade,estado,pop)3> top6pop4> cidade estado pop5> 1 São Paulo SP 113766856> 2 Rio de Janeiro RJ 63902907> 3 Salvador BA 27106988> 4 Brasília DF 26485329> 5 Fortaleza CE 2500194

10> 6 Belo Horizonte MG 239578511> 7 Manaus AM 1861838

53 / 110

Page 64: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Estruturas de dadosDataframes

1> # Acessando as informações contidas em top6pop2> top6pop$estado3> [1] SP RJ BA DF CE MG AM4> Levels: AM BA CE DF MG RJ SP5> #6> top6pop[2] # outra forma de acessar os estados7> estado8> 1 SP9> 2 RJ

10> 3 BA11> 4 DF12> 5 CE13> 6 MG14> 7 AM15> #16> top6pop$pop 2.7e6 # cidades com mais de 2.7 mi hab17> [1] TRUE TRUE TRUE FALSE FALSE FALSE FALSE18> #19> top6pop$pop[top6pop$pop>2.7e6] # populações maiores que 2.7 mi hab20> [1] 11376685 6390290 2710698

54 / 110

Page 65: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Conteúdo

Linguagem RInformações PreliminaresSintaxe do RSímbolosVetoresInstruções de ControleFunçõesOperadoresEstruturas de dadosObjetos e ClassesGráficosPacotes e Dados do R

55 / 110

Page 66: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

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

Page 67: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Objetos e ClassesModelos 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

Page 68: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Objetos e ClassesModelos e fórmulas

� Vamos analisar o seguinte exemplo

1> # Conjunto de 20 pontos com ruído que segue uma distribuição normal2> set.seed(2)3> x = seq(from=0,to=5,length=20)4> y = 2*x - 3 + rnorm(20) # rnorm(): dist. normal5> xy= data.frame(x,y)6> xy7> x y8> 1 0.0000000 -3.89691459> 2 0.2631579 -2.2888350

10> ...11> 20 5.0000000 7.432265212>13> # lm() constroi um modelo y~x e atribui a variável xy.lm14> # -- y : variável dependente15> # -- x : variável independente16> xy.lm = lm(formula=y~x, data=xy)

57 / 110

Page 69: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Objetos e ClassesModelos e fórmulas

1> # Vamos analisar o objeto xy.lm (modelo linear)2> xy.lm3>4> Call:5> lm(formula = y ~ x, data = xy)6>7> Coefficients:8> (Intercept) x9> -2.926 2.049

10>11> # Observe os coeficiente e compare com o modelo y = 2*x - 3 + rnorm(20)

58 / 110

Page 70: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Objetos e ClassesModelos 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 Max9> -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 " " 117>18> Residual standard error: 1.085 on 18 degrees of freedom19> Multiple R-squared: 0.9012, Adjusted R-squared: 0.895720> F-statistic: 164.3 on 1 and 18 DF, p-value: 1.738e-10

59 / 110

Page 71: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Objetos e ClassesModelos e fórmulas

1> # predict.lm() avalia os dados do dataframe xy no modelo xy.lm2> xy.pr=predict.lm(xy.lm)3>4> # Usamos algumas ferramentas gráficas para visualizar5> plot(x,y,col='blue'); lines(x,xy.pr,col='red')

60 / 110

Page 72: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Conteúdo

Linguagem RInformações PreliminaresSintaxe do RSímbolosVetoresInstruções de ControleFunçõesOperadoresEstruturas de dadosObjetos e ClassesGráficosPacotes e Dados do R

61 / 110

Page 73: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

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

Page 74: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Gráficos

1> # Gráfico da função seno2> 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

Page 75: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Gráficos

1> # Gráficos de funções paramétricas de uma variável2> par(mfrow=c(1,2)) # uma linha e duas colunas3> 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

Page 76: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Gráficos

1> # Histograma de uma série dados com distribuição normal2> x = rnorm(1000)3> hist(x,col="yellow",breaks=40)

64 / 110

Page 77: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Gráficos

1> # Um gráfico de barras2> barplot(c(2,4,7,5,3,1),col='lightblue')

65 / 110

Page 78: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Gráficos

1> # Gráfico de pizza2> pie(1:6, col = rainbow(6), labels= LETTERS[1:6], radius = 0.9)

66 / 110

Page 79: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Gráficos

1> # Gráfico de densidade2> x = rnorm(200)3> plot(density(x),col='red',lwd=2)

67 / 110

Page 80: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Gráficos

1> # Boxplots2> x <- rnorm(200) # distribuição normal3> y <- rlnorm(200) # distribuição log-normal4> 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

Page 81: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Conteúdo

Linguagem RInformações PreliminaresSintaxe do RSímbolosVetoresInstruções de ControleFunçõesOperadoresEstruturas de dadosObjetos e ClassesGráficosPacotes e Dados do R

69 / 110

Page 82: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Pacotes e Dados do RDados

� O R possui pacotes de dados internos, usados principamente parademos e desenvolvimento de pacotes

1> # Os pacotes de dados disponíveis são listados através do comando2> data()3> Data sets in package 'datasets':4>5> AirPassengers Monthly Airline Passenger Numbers 1949-19606> BJsales Sales Data with Leading Indicator7> ...8> volcano Topographic Information on Maunga Whau Volcano9> warpbreaks The Number of Breaks in Yarn during Weaving

10> women Average Heights and Weights for American Women11>12>13> Use "data(package = .packages(all.available = TRUE))"14> to list the data sets in all *available* packages.

69 / 110

Page 83: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Pacotes e Dados do RDados

1> # Para acessar um determinado conteúdo2> data(trees)3> trees4> Girth Height Volume5> 1 8.3 70 10.36> 2 8.6 65 10.37> ...8> 31 20.6 87 77.09>

10> # Operando com os dados11> class(trees)12> [1] "data.frame"13> mean(trees)14> Girth Height Volume15> 13.24839 76.00000 30.1709716> str(trees) # mostra informações sobre a estrututa do objeto17> '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

Page 84: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Pacotes e Dados do RDados

1> # Medidas do fluxo anual do Nilo na cidade de Ashwan 1871-19702> data(Nile)3> Nile4> Time Series:5> Start = 18716> End = 19707> Frequency = 18> [1] 1120 1160 963 1210 1160 1160 813 1230 1370 1140 995 9359> [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 91611> [37] 692 1020 1050 969 831 726 456 824 702 1120 1100 83212> [49] 764 821 768 845 864 862 698 845 744 796 1040 75913> [61] 781 865 845 944 984 897 822 1010 771 676 649 84614> [73] 812 742 801 1040 860 874 848 890 744 749 838 105015> [85] 918 986 797 923 975 815 1020 906 901 1170 912 74616> [97] 919 718 714 74017> 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

Page 85: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Pacotes e Dados do RPacotes

� Um pacote é um conjunto de funções, arquivos de ajuda e arquivosde dados empacotados juntos

� Pacotes em R são similares aos modulos em Perl, bibliotecas em C eclasses em Java

� Tipicamente, todas as funções em um pacote estão relacionadasentre si

� O pacote stats agrupa funções de análise estatística

1> # Carrega os pacote -- comandos equivalentes2> library(stats)3> require(stats)4>5> # Para maiores informações6> library(help="stats")7> ?stats

72 / 110

Page 86: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Pacotes e Dados do RPacotes

� 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 derepositórios

73 / 110

Page 87: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Pacotes e Dados do RPacotes

1> # Pacotes carregados automaticamente2> getOption("defaultPackages")3> [1] "datasets" "utils" "grDevices" "graphics" "methods" "stats"4>5> # Pacotes disponíveis para serem carregados6> (.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 online15> install.packages('psy')16>17> # Remoção de pacotes18> remove.packages(c("tree", "maptree"),.Library)

74 / 110

Page 88: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Conteúdo

Análise de CasosAjuste de CurvasVazão da Represa de FurnasAnálise de Adubação da SojaComputação Simbólica no R

75 / 110

Page 89: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Ajuste de Curvas

� Vamos usar dados que relacionam a temperatura em graus Celsiuscom o valor da pressão de mercúrio.

1> # Carrega os dados2> data(pressure)3> head(pressure)4> temperature pressure5> 1 0 0.00026> 2 20 0.00127> 3 40 0.00608> 4 60 0.03009> 5 80 0.0900

10> 6 100 0.270011>12> pres = pressure$pressure # cria variáveis auxiliares13> temp = pressure$temperature14> plot(pres~temp, ylim=c(-50,400)) # gráfico dos dados

75 / 110

Page 90: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Ajuste de Curvas

1> # Constrói os modelos2> lm1=lm(pres~temp) # linear3> lm2=lm(pres~temp + I(temp^2)) # quadrático4> lm3=lm(pres~temp + I(temp^2)+ I(temp^3)) # cúbico5>6> summary(lm1)7> summary(lm2)8> summary(lm3)9>

10> # Gráficos dos modelos11> 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> # Legenda16> legend(x='topleft',legend=c('linear','quadrático','cúbico'),col=c(3,2,4),lwd=1)

76 / 110

Page 91: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Ajuste de Curvas

77 / 110

Page 92: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Conteúdo

Análise de CasosAjuste de CurvasVazão da Represa de FurnasAnálise de Adubação da SojaComputação Simbólica no R

78 / 110

Page 93: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Vazão da Represa de Furnas

� Análise gráfica da série histórica (1931-2010) da vazão naturalmensal 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

Page 94: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Vazão da Represa de Furnas

1> #2> # Análise da série histórica das vazões mensais da barragens de Furnas3> # Fonte: http://www.ons.org.br/operacao/vazoes_naturais.aspx4> #5> rm(list=ls()) # apaga todo o workspace6> 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 planilhas13> v <- read.xls(xls='./data/Vazoes_Mensais_1931_2010.xls',sheet=1)14> View(v)15>16> ano <- v["ANO"] # primeira coluna17> vaz <- v[,-1] # todos os dados exceto a 1a coluna18>19>20> # Aplica a função média nas colunas de v21> vaz.m <- apply(vaz,2,mean) # médias das vazões mensais22> View(vaz.m)

79 / 110

Page 95: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Vazão da Represa de Furnas

1> # Análise gráfica das médias das vazões mensais2> 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

Page 96: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Vazão da Represa de Furnas

1> # Boxplots das vazões mensais2> 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

Page 97: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Vazão da Represa de Furnas

1> # Histograma das vazões mensais2> 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

Page 98: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Conteúdo

Análise de CasosAjuste de CurvasVazão da Represa de FurnasAnálise de Adubação da SojaComputação Simbólica no R

83 / 110

Page 99: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Análise de Adubação da Soja

� Experimento em casa de vegetação com a cultura da soja, 2 plantaspor 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ãos2. pesograo : peso de grãos3. kgrao : conteúdo de potássio no grão4. pgrao : conteúdo de fósforo no grão5. ts : total de sementes por planta6. nvi : número de vagens inviáveis7. nv : número de vagens total

� Fonte: http://www.leg.ufpr.br/~walmes/

83 / 110

Page 100: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

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 estamos4> getwd()5> # Depois, devemos mudar para o diretório onde estão os dados6> setwd('diretorio_onde_estao_os_dados')7> #8> # O comando read.table() lê o arquivo em formato de tabela e cria um9> # dataframe a partir dele, com as entradas correspondendo às linhas

10> # e as variáveis correspondendo às colunas11> #12> soja <- read.table('./data/soja.txt',header=TRUE)13>14> View(soja) # visualização dos dados15>16> # Algumas informações sobre os dados17> class(soja) # classe do objeto18> names(soja) # nomes das colunas19> dim(soja) # dimensões20> str(soja) # estrutura21> head(soja) # cabeçalho22> soja # imprime todos os registros

84 / 110

Page 101: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Análise de Adubação da Soja

1> # Visualização rápida dos dados2> head(soja) # cabeçalho3> potassio agua bloco rengrao pesograo kgrao pgrao ts nvi nv4> 1 0 37.5 I 14.55 10.70 15.13 1.18 136 22 565> 2 30 37.5 I 21.51 13.53 17.12 0.99 159 2 626> 3 60 37.5 I 24.62 15.78 19.11 0.82 156 0 667> 4 120 37.5 I 21.88 12.80 18.12 0.85 171 2 688> 5 180 37.5 I 28.11 14.79 19.11 0.88 190 0 829> 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

Page 102: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

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 II5> [24] II II II II II II II III III III III III III III III III III III6> [47] IV IV IV IV IV IV IV IV IV IV IV IV IV IV V V V V7> [70] V V V V V V8> Levels: I II III IV V9>

10> soja$rengrao11> [1] 14.55 21.51 24.62 21.88 28.11 17.16 24.44 28.50 32.94 28.76 14.13 19.7112> [16] 15.72 19.72 24.29 25.39 28.45 15.44 28.12 31.49 29.95 30.06 15.42 23.6813> [31] 12.77 20.45 24.35 27.15 24.08 16.01 24.57 28.85 26.23 26.36 16.08 20.9914> [46] 14.26 23.71 22.76 22.46 22.97 15.54 18.48 25.54 30.29 30.64 17.26 20.5115> [61] 10.30 16.28 23.61 29.66 23.34 14.41 17.24 29.08 29.52 27.98 17.56 20.0516>17> soja$potassio # a variável potassio também écategórica, mas foi lida como numérica18> [1] 0 30 60 120 180 0 30 60 120 180 0 30 60 120 180 0 30 6019> [24] 120 180 0 30 60 120 180 0 30 60 120 180 0 30 60 120 180 020> [47] 30 60 120 180 0 30 60 120 180 0 30 60 120 180 0 30 60 12021> [70] 180 0 30 60 120 180

86 / 110

Page 103: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Análise de Adubação da Soja

1> # O comando attach() anexa a base de dados ao workspace do R2> #3> # Os objetos no banco de dados podem ser acessados simplesmente4> # digitando seus nomes5>6> attach(soja)7> rengrao8> [1] 14.55 21.51 24.62 21.88 28.11 17.16 24.44 28.50 32.94 28.769> ...

10> [73] 29.90 20.86 35.5011>12> # Para desanexar a base de dados13> detach(soja)14> rengrao15> Error: object 'rengrao' not found

87 / 110

Page 104: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Análise de Adubação da Soja

1> # Exploração númerica, médias por nível de potássio, água e potássio:água2> attach(soja) # anexa a base de dados3> levels(factor(potassio)) # factor() transforma a variável em categórica e levels() ←↩

extrai as categorias4> [1] "0" "30" "60" "120" "180"5>6> tapply(rengrao,potassio,mean) # tapply() aplica um função a um grupo de valores de ←↩

um array7> 0 30 60 120 1808> 15.10733 21.29733 27.48200 29.51067 30.432009>

10> tapply(rengrao,list(agua),mean)11> 37.5 50 62.512> 21.6956 25.1040 27.498013>14> tapply(rengrao,list(potassio,agua),mean) # médias de rendimento para potassio:agua15> 37.5 50 62.516> 0 13.520 15.712 16.09017> 30 20.334 22.570 20.98818> 60 23.926 28.692 29.82819> 120 25.308 29.786 33.43820> 180 25.390 28.760 37.146

88 / 110

Page 105: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Análise de Adubação da Soja

1> # O comando with avalia uma expressão em uma base de dados2> # Assim, não precisamos anexar soja3>4> # A mesma exploração numérica anterior5> with(soja, tapply(rengrao, list(potassio), mean))6> 0 30 60 120 1807> 15.10733 21.29733 27.48200 29.51067 30.432008>9> with(soja, tapply(rengrao, list(agua), mean))

10> 37.5 50 62.511> 21.6956 25.1040 27.498012>13> with(soja, tapply(rengrao, list(potassio, agua), mean))14> 37.5 50 62.515> 0 13.520 15.712 16.09016> 30 20.334 22.570 20.98817> 60 23.926 28.692 29.82818> 120 25.308 29.786 33.43819> 180 25.390 28.760 37.146

89 / 110

Page 106: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Análise de Adubação da Soja

1> # Selecionando subconjuntos dos dados de acordo com os níveis das categorias2> 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 respostas8> subset(soja, rengrao<15)9> subset(soja, rengrao<15 & pesograo<11)

90 / 110

Page 107: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

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

Page 108: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

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

Page 109: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

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 colunas3> 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

Page 110: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

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áfica3> 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=36> title("Médias dos tratamentos")7> box()

94 / 110

Page 111: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Análise de Adubação da Soja

1> # Melhorando o aspecto2> 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

Page 112: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Análise de Adubação da Soja

1> # Mais análise gráfica: rendimento em função de potassio para cada grupo de água2> require(lattice) # biblioteca para gráficos mais elaborados3>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

Page 113: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Conteúdo

Análise de CasosAjuste de CurvasVazão da Represa de FurnasAnálise de Adubação da SojaComputação Simbólica no R

97 / 110

Page 114: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

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 simples2> rm(list=ls()) # limpa o espaço de trabalho3>4> # Cria uma expressão simbólica5> 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 found12>13> # Repetindo, mas agora com a criação de x14> x=seq(0,pi,length=20)15> eval(f)16> [1] 1.00000000 1.01357652 1.05319340 1.11556315 1.19537338 1.2855302117> [7] 1.37748586 1.46163791 1.52778475 1.56561949 1.56524303 1.5176760018> [13] 1.41534884 1.25255020 1.02581462 0.73423276 0.37966969 -0.0331199319> [19] -0.49648737 -1.00000000

97 / 110

Page 115: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Computação Simbólica no R

1> # O grafico de f -- o rótulo de y éuma expressão2> plot(ef~x,type='b', ylab=f, col='violetred4')

98 / 110

Page 116: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

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 missing4> D(f,"x")5> sin(x) + x * cos(x) - sin(x)6>7> # Para derivadas de ordem superior, definimos a função8> 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

Page 117: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Computação Simbólica no R

1> # Continuando com as derivadas de ordem superior2> f4=DD(f,"x",4)3> f44> -(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

Page 118: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Conteúdo

Interface com Outras LinguagensR e outras Linguagens de ProgramaçãoCombinando R com C e Fortran

101 / 110

Page 119: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

R e outras Linguagens de Programação

� Em R, podemos reutilizar códigos desenvolvidos em outraslinguagens� 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

Page 120: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Conteúdo

Interface com Outras LinguagensR e outras Linguagens de ProgramaçãoCombinando R com C e Fortran

102 / 110

Page 121: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

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 ouFortran com a maioria da conveniência de R é escrever o loopinterno em C e chamá-lo de dentro do R

� Vamos considerar um problema bem simples, elevar ao quadradooselementos de um vetor x = (x1,x2, . . . ,xn−1,xn)

q(x) = (x21 ,x

22 , . . . ,x

2n−1,x

2n )

102 / 110

Page 122: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

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 osvalores 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; i<n; i++)8> x[i] = x[i] * x[i];9> }

103 / 110

Page 123: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

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ãosão reconhecidas pelo R.

� A segunda proriedade é automática em Fortran. Fortran só aceitapassagens de argumentos por referência, que corresponde aos ponteirosem C.

1> ! pot2f.f2> subroutine pot2f(n, x)3>4> integer n5> double precision x(n)6> integer i7>8> do i = 1, n9> x(i) = x(i) ** 2

10> enddo11>12> end

104 / 110

Page 124: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

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 C2> R CMD SHLIB pot2c.c3> # Resultado do comando4> # gcc -I/usr/share/R/include -fpic -std=gnu99 -O3 -pipe -g -c pot2c.c -o pot2c.o5> # gcc -shared -o pot2c.so pot2c.o -L/usr/lib/R/lib -lR6>7>8> # Compila o código em Fortran9> R CMD SHLIB pot2f.f

10> # Resultado do comando11> # gfortran -fpic -O3 -pipe -g -c pot2f.f -o pot2f.o12> # 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

Page 125: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Combinando R com C e Fortran

� Voltando ao R, podemos carregar as bibliotecas

1> # Carregas as biblotecas geradas2> dyn.load("pot2c.so")3> dyn.load("pot2f.so")4>5> # Verifica as bibliotecas carregadas com o comando getLoadedDLLs()6> getLoadedDLLs()7> Filename Dynamic.Lookup8> base base FALSE9> methods /usr/lib/R/library/methods/libs/methods.so FALSE

10> grDevices /usr/lib/R/library/grDevices/libs/grDevices.so FALSE11> stats /usr/lib/R/library/stats/libs/stats.so FALSE12> pot2c /tmp/pot2c.so TRUE13> pot2f /tmp/pot2f.so TRUE

106 / 110

Page 126: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

Combinando R com C e Fortran

� Executando o função em C

1> # Para testar, vamos criar um vetor x2> x=c(1,2,3,4,5)3> x4> [1] 1 2 3 4 55>6> typeof(x) # x deve ser double, assim como o argumento na função em C7> [1] "double"8>9> # A chamada da função em R éfeita pelo comando .C()

10> .C("pot2c", n=length(x), x=x)11> $n12> [1] 513>14> $x15> [1] 1 4 9 16 25

107 / 110

Page 127: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

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> $n4> [1] 55>6> $x7> [1] 1 4 9 16 25

108 / 110

Page 128: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

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 envelope2> 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ção12> pot2c(x)13> [1] 1 4 9 16 25

109 / 110

Page 129: R - Introdu[PleaseinsertPrerenderUnicode{ç}intopreamble ... · Objetivos do minicurso Apresentar o ambiente de programação R contexto de simulação e análise de dados Fornecer

110 / 110