Mini R

1.160 visualizações

Publicada em

Minicurso de R --
Semana da Computação da UFJF 2012

0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
1.160
No SlideShare
0
A partir de incorporações
0
Número de incorporações
2
Ações
Compartilhamentos
0
Downloads
24
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Mini R

  1. 1. RIntrodução– Semana da Computação da UFJF –Leonardo GoliattDepto Mecânica Aplicada e ComputacionalUFJFleonardo.goliatt@ufjf.edu.br2012 Outubro/16http://bit.ly/WiheUu1 / 110
  2. 2. ProgramaInformações PreliminaresLinguagem RAnálise de CasosInterface com Outras Linguagens2 / 110
  3. 3. ConteúdoInformações PreliminaresSobre o RInterface RLinguagem RInformações PreliminaresSintaxe do RSímbolosVetoresInstruções de ControleFunçõesOperadoresEstruturas de dadosObjetos e ClassesGráficosPacotes e Dados do RAnálise de CasosAjuste de CurvasVazão da Represa de FurnasAnálise de Adubação da SojaComputação Simbólica no RInterface com Outras LinguagensR e outras Linguagens de ProgramaçãoCombinando R com C e Fortran3 / 110
  4. 4. ConteúdoInformações PreliminaresSobre o RInterface R4 / 110
  5. 5. O R e sua filosofia de trabalhoR pode ser definido como um ambiente de programação comferramentas paramanipulação de dadoscálculose apresentação gráficaComo ambiente, entende-se um sistema coerente e totalmenteplanejadoO R não é um software do tipo aplicativoa preocupação não é com amigabilidade, mas comflexibilidadecapacidade de manipulação de dadosrealização de análises4 / 110
  6. 6. Sobre o RR é freeR é open-sourceQualquer pessoa tem liberdade para usar e modficarQuem usa R?GooglePfizerMerckBank of AmericaR 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/Wl12E45 / 110
  7. 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çõesconstrução de modelosR é flexível e personalizávelIdeal para análise exploratória de dadosPor outro lado,R é pouco eficiente para manipular grandes conjuntos de dadosPouco eficiente na execução de grandes laços (loops) quandocomparado com outras linguagens com C, Fortran e C++6 / 110
  8. 8. Objetivos do minicursoApresentar o ambiente de programação R contexto de simulação eanálise de dadosFornecer exemplos claros e simples da funcionalidade e flexibilidadedo REstimular o aproveitamento do Software Livre, evitando as restriçõesde softwares comerciais e o uso não autorizado destes.7 / 110
  9. 9. Página Oficial do RReferência básica para usuários de R: http://www.r-project.org/inclui programas para downloadlistas de discussãodocumentação e ajudaLivros:R in a NutshellThe Art of R ProgrammingOnde baixar (Linux, Windows, Mac):http://cran.fiocruz.br/Ubuntu (Linux): sudo apt-get install r-base8 / 110
  10. 10. ConteúdoInformações PreliminaresSobre o RInterface R9 / 110
  11. 11. Como usar o R?Diretamente do terminal ou console (tela preta)Linux: konsole, xterm, gnome-terminalUsando interfaces gráficasRstudio: 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. 12. Invocando o R na linha de comandoSe estiver corretamente instalado, abra um terminal e digite R.O símbolo “>” indica que o R está esperando um comando1> 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
  13. 13. Invocando o R na linha de comandoAjuda sobre algo sobre o que se deseja1> 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 procurar1> help(mean) # help em modo texto2> ?mean # o mesmo que help(mean)3> help(mean,help_type=html) # help em modo html11 / 110
  14. 14. Invocando o R na linha de comandoPara sair do programa, digite1> quit()2> Save workspace image? [y/n/c]: n12 / 110
  15. 15. ConteúdoLinguagem RInformações PreliminaresSintaxe do RSímbolosVetoresInstruções de ControleFunçõesOperadoresEstruturas de dadosObjetos e ClassesGráficosPacotes e Dados do R13 / 110
  16. 16. Informações PreliminaresFuncionamento básico:entre com uma expressão no console e digite <enter>a expressão é avaliada e o resultado impresso na telaNote que [1] sempre acompanha qualquer resultado1 # Isto éum comentário2 1 + 2 + 33 [1] 64 1 + 2 * 3 # outro comentário5 [1] 76 (1 + 2) * 3 # ...7 [1] 913 / 110
  17. 17. Informações PreliminaresR é case-sensitive: então A e a são símbolos diferentes e se referema diferentes variáveisComandos são separados por ponto e vírgula “;”O conjunto de símbolos dependem do idioma e do sistemaoperacional 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=banana3 print(A)4 [1] 25 print(a)6 [1] banana7 #8 .num=45; print(.num+1)9 [1] 4614 / 110
  18. 18. Informações PreliminaresComo a maioria das linguagens de programação, R permite atribuirvalores a variáveisA operação de atribuição tem a sintaxe objeto recebe valorHá dois operadores que atribuem valores a um objeto dessa maneirasinal 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] 1015 / 110
  19. 19. Informações PreliminaresUma forma de atribuição menos usada é valor atribuído a objeto1 # Outra forma, menos usual é2 salsa -d -e3 print(d)4 [1] salsa5 print(e)6 [1] salsa78 # Para saber mais9 ?=10 ?-16 / 110
  20. 20. Informações PreliminaresEm R, todo resultado é interpretado como um vetorO “[1]” indica o índice do vetorNo caso abaixo, os números entre colchetes indicam o índice doprimeiro elemento de cada linha1 # 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 5017 / 110
  21. 21. Informações Preliminares1 # 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] 1081011 # 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] 318 / 110
  22. 22. ConteúdoLinguagem RInformações PreliminaresSintaxe do RSímbolosVetoresInstruções de ControleFunçõesOperadoresEstruturas de dadosObjetos e ClassesGráficosPacotes e Dados do R19 / 110
  23. 23. Sintaxe do RVamos começar com uma visão geral do RÈ possível escrever quase qualquer expressão em R como umafunçãoPorém, isso pode se tornar confuso e o R permite algumas sintaxesespeciaisA sintaxe básica envolve:Constantesnúmeroscaracteressímbolos.SímbolosOperadoresOperadores básicos e definidos pelo usuárioAtribuição19 / 110
  24. 24. Sintaxe do RVetores numéricos1 # Números são interpretados literalmente2 1.13 [1] 1.14 2^10235 [1] 8.988466e+30767 # Valores em notação hexadecimal comecam com 0x8 0x19 [1] 110 0xFFFF11 [1] 655351213 # Qualquer número éinterpretado como ponto flutuante de dupla precisão14 typeof(1)15 [1] double16 ?typeof # mais sobre a função typeof()17 typeof(as(1,integer)) # se deseja um inteiro, use a função as18 [1] integer20 / 110
  25. 25. Sintaxe do RVetores numéricos1 # 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^102378 # R suporta complexos, escritos como (real) + (imaginário)i9 0+1i ^ 210 [1] -1+0i11 sqrt(-1+0i)12 [1] 0+1i13 exp(0+1i * pi)14 [1] -1+0i1516 # A função sqrt() retorna um valor do mesmo tipo de entrada17 sqrt(-1)18 [1] NaN19 Warning message:20 In sqrt(-1) : NaNs produced21 / 110
  26. 26. Sintaxe do RVetores numéricos1 # 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] integer67 # 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.00000001112 # 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 122 / 110
  27. 27. Sintaxe do RCaracteres1 # Um caracter contém texto entre duas aspas2 y - abc3 y4 [1] abc5 length(y) # tamanho de y6 [1] 17 mode(y) # equivalente a typeof()8 [1] character910 # Um vetor de caracteres11 z - c(abc,29 88)12 length(z)13 [1] 214 mode(z)15 [1] character23 / 110
  28. 28. Sintaxe do RCaracteres1 # Concatenação de caracteres ...2 u - paste(abc,de,f) # concatena as strings3 u4 [1] abc de f5 # ... e separação (split)6 v - strsplit(u,.) # divide em função dos espaços7 v8 [[1]]9 [1] abc de f1011 # Outra forma de concaternar ...12 u - paste(abc,de,f,sep=.) # usa . como separador13 u14 [1] abc.de.f15 # ... e separar16 strsplit(u,)17 [[1]]18 [1] a b c . d e . f24 / 110
  29. 29. ConteúdoLinguagem RInformações PreliminaresSintaxe do RSímbolosVetoresInstruções de ControleFunçõesOperadoresEstruturas de dadosObjetos e ClassesGráficosPacotes e Dados do R25 / 110
  30. 30. SímbolosUm símbolo é um objeto que se refere a outro objeto1 # 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 - 11011 # Se necessário (!?), defina um símbolo assim:12 1+2=3 - hello13 1+2=314 [1] hello1516 # 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
  31. 31. SímbolosFunçõesUma função é uma outra forma de atribuir valor a um símbolo1 # 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)}89 # Visualizando o conteúdo da função desvio padrão10 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
  32. 32. ConteúdoLinguagem RInformações PreliminaresSintaxe do RSímbolosVetoresInstruções de ControleFunçõesOperadoresEstruturas de dadosObjetos e ClassesGráficosPacotes e Dados do R27 / 110
  33. 33. VetoresOperações básicasO comando c(), de “combinar” é a forma principal de criar vetores1 # 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 989 # Listando os elementos no espaço de trabalho10 ls()11 [1] x y z1213 # Apagando alguns deles14 rm(x,y)1516 # Listando novamente17 ls()18 [1] z1920 rm(list=ls()) # apaga tudo27 / 110
  34. 34. VetoresOperações básicas1 # 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 578 # o mesmo vale para divisão9 1 / c(1, 2, 3, 4, 5)10 [1] 1.0000000 0.5000000 0.3333333 0.2500000 0.20000001112 # no caso abaixo, a menor sequência tem tamanho 213 c(1, 2, 3, 4) + c(10, 100)14 [1] 11 102 13 1041516 # 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 menor28 / 110
  35. 35. VetoresOperações básicas1 # Em R podemos entrar com expressões de caracteres2 Hello world.3 [1] Hello world.45 # Um vetor de caracteres de comprimento 36 c(Hello world, Hello R interpreter)7 [1] Hello world8 Hello R interpreter29 / 110
  36. 36. VetoresOperações básicas1 # 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 310 [1] 1 2 0 1 2 0 1 2 0 11112 # A operação abaixo retorna um vetor lógico13 b%%3==014 [1] FALSE FALSE TRUE FALSE FALSE TRUE FALSE FALSE TRUE FALSE1516 # 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 930 / 110
  37. 37. ConteúdoLinguagem RInformações PreliminaresSintaxe do RSímbolosVetoresInstruções de ControleFunçõesOperadoresEstruturas de dadosObjetos e ClassesGráficosPacotes e Dados do R31 / 110
  38. 38. Instruções de ControleAs instruções de controle em R são muito similares àquelas de C,C++, Perl e PythonAqui 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.131011 # 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
  39. 39. Instruções de Controle1 # C-style while2 i - 13 while (i = 10) i - i+44 i5 [1] 1367 # Funcionamento básico do if8 if (r == 4) {9 + x - 110 +} else {11 + x - 312 + y - 413 +}1415 # 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] 232 / 110
  40. 40. ConteúdoLinguagem RInformações PreliminaresSintaxe do RSímbolosVetoresInstruções de ControleFunçõesOperadoresEstruturas de dadosObjetos e ClassesGráficosPacotes e Dados do R33 / 110
  41. 41. FunçõesEm R, as operações que fazem todo o trabalho são chamadasfunções1 # Funções com 1 argumento2 exp(1)3 [1] 2.7182824 cos(3.141593)5 [1] -167 # Alguns argumentos podem ser especificados pelo nome8 log(x=64, base=4)9 [1] 31011 # 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.00000033 / 110
  42. 42. FunçõesNem todas as funções têm a forma f (x1,x2,....)Algumas aparecem na forma de operadores1 17 + 22 [1] 193 2 ^ 104 [1] 10245 3 == 46 [1] FALSE34 / 110
  43. 43. FunçõesAssim como em qualquer linguagem de programação, o cerne do Rconsiste em escrever funçõesUma função é um grupo de instruções que recebe as entradas, operasobre elas e retorma uma saída1 # 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 + }910 oddcount(c(1,3,5))11 [1] 312 oddcount(c(1,2,3,7,9))13 [1] 435 / 110
  44. 44. FunçõesVariáveis criadas fora da função são globais e visíveis pela função1 f - function(x) return(x+y)2 y - 33 f(5)4 [1] 8Entradas podem ter um valor default1 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
  45. 45. ConteúdoLinguagem RInformações PreliminaresSintaxe do RSímbolosVetoresInstruções de ControleFunçõesOperadoresEstruturas de dadosObjetos e ClassesGráficosPacotes e Dados do R37 / 110
  46. 46. OperadoresOperadores básicosUm operador é uma função que toma um ou mais argumentos epode ser escrita sem parênteses1 x - -1:52 x3 [1] -1 0 1 2 3 4 545 # adição e multiplicação6 2 * x + 37 [1] 1 3 5 7 9 11 138 # exponenciação9 x^310 [1] -1 0 1 8 27 64 1251112 # resto da divisão (módulo)13 x %% 2 #-- éperiódico14 [1] 1 0 1 0 1 0 11516 # divisão inteira17 x %/% 5 # x %/% 5 == floor(x/5)18 [1] -1 0 0 0 0 0 137 / 110
  47. 47. OperadoresOperadores definidos pelo usuário1 # Você pode definir seus próprios operadores2 # Vamos definir o operador %myop% através de uma função34 %myop% - function(a, b) {2*a + b}5 1 %myop% 16 [1] 37 1 %myop% 28 [1] 4910 c(1,2,3,4,5) %myop% 211 [1] 4 6 8 10 121213 # Atribuição éum operador14 x - c(1,2,3,4,5)1516 # O negativo também éum operador17 -718 [1] -71920 # O ponto de interrogação ? (help) também éum operador21 ??38 / 110
  48. 48. OperadoresAtribuição1 # As operações de atribuição atribuem um objeto a um símbolo23 # Vetor atribuído a um símbolo4 v - c(1,2,3,4,5,6,7,8)56 # Objeto lista atribuída a um símbolo7 y - list(sapato=mocassim, chapeu=gorro, camisa=polo)8 y9 $sapato10 [1] mocassim1112 $chapeu13 [1] gorro1415 $camisa16 [1] polo1718 # 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
  49. 49. ConteúdoLinguagem RInformações PreliminaresSintaxe do RSímbolosVetoresInstruções de ControleFunçõesOperadoresEstruturas de dadosObjetos e ClassesGráficosPacotes e Dados do R40 / 110
  50. 50. Introdução as estruturas de dadosEm R, podemos construir estruturas de dados mais complicadas doque vetoresAlguns casosarrayslistasdataframes...40 / 110
  51. 51. Estruturas de dadosArrays1 # 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 1241 / 110
  52. 52. Estruturas de dadosArrays1 # 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 1278 # Somente a primeira linha9 a[1,]10 [1] 1 4 7 1011 # Somente a primeira coluna12 a[,1]13 [1] 1 2 31415 # Acessando uma fatia das linhas16 a[1:2,]17 [,1] [,2] [,3] [,4]18 [1,] 1 4 7 1019 [2,] 2 5 8 1142 / 110
  53. 53. Estruturas de dadosArrays1 # 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 1278 # Acessando um conjunto não contíguo colunas9 a[,c(1,3)] # mostra somente as colunas 1 e 310 [,1] [,2]11 [1,] 1 712 [2,] 2 813 [3,] 3 91415 # 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 943 / 110
  54. 54. Estruturas de dadosArrays1 # 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 1289 # O comando matrix(() preenche as colunas com os dados fornecidos10 matrix(1:6,nrow=2)11 [,1] [,2] [,3]12 [1,] 1 3 513 [2,] 2 4 61415 # 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 644 / 110
  55. 55. Estruturas de dadosArrays1 # 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 -389 # -- cbind()10 n - cbind(c(1,4),c(2,-3))11 n12 [,1] [,2]13 [1,] 1 214 [2,] 4 -31516 # --diag()17 diag(2)18 [,1] [,2]19 [1,] 1 020 [2,] 0 145 / 110
  56. 56. Estruturas de dadosArrays1 # 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 -978 # -- divisão termo a termo9 m/diag(2)10 [,1] [,2]11 [1,] 1 Inf12 [2,] Inf -31314 # -- produto matricial15 m % * % n16 [,1] [,2]17 [1,] 17 -1018 [2,] -10 1346 / 110
  57. 57. Estruturas de dadosArraysAtençã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 689 # Aparentemente, a operação não faria sentido10 x+c(1,2)11 [,1] [,2]12 [1,] 2 613 [2,] 4 614 [3,] 4 81516 # Vamos vamos fazer algumas considerações...47 / 110
  58. 58. Estruturas de dadosArraysAtençã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 878 # 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 848 / 110
  59. 59. Estruturas de dadosArrays1 # Arrays podem ter mais de uma dimensão2 w - array(c(1:18),dim=c(3,3,2))3 print(w)4 , , 156 [,1] [,2] [,3]7 [1,] 1 4 78 [2,] 2 5 89 [3,] 3 6 91011 , , 21213 [,1] [,2] [,3]14 [1,] 10 13 1615 [2,] 11 14 1716 [3,] 12 15 181718 # Acessando um dos elementos19 w[1,1,1]20 [1] 149 / 110
  60. 60. Estruturas de dadosListasUma lista aceita a mistura de objetos de diferentes tipos1 # Uma lista contendo um número e uma string2 e - list(elemento=esfera, raio=8.25)3 e4 $elemento5 [1] esfera67 $raio8 [1] 8.25910 # Os objetos podem ser acessados de várias formas11 e$elemento12 [1] esfera13 e[2]14 $raio15 [1] 8.251617 e[[2]]18 [1] 8.2550 / 110
  61. 61. Estruturas de dadosListas1 # Uma lista pode referenciar outra lista2 g - list(Essa lista referencia outra lista, e)3 g4 [[1]]5 [1] Essa lista referencia outra lista67 [[2]]8 [[2]]$objeto9 [1] esfera1011 [[2]]$raio12 [1] 8.2551 / 110
  62. 62. Estruturas de dadosDataframesUm dataframe é um objeto que contém múltiplos vetores que são domesmo tamanhoé semelhante a uma planilha ou base de dadosbons para representar dados experimentais1 # 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)56 # As informações estão armazenadas em vetores7 cidade8 [1] São Paulo Rio de Janeiro Salvador Brasília9 [5] Fortaleza Belo Horizonte Manaus10 estado11 [1] SP RJ BA DF CE MG AM12 pop13 [1] 11376685 6390290 2710698 2648532 2500194 2395785 186183852 / 110
  63. 63. Estruturas de dadosDataframes1 # 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 250019410 6 Belo Horizonte MG 239578511 7 Manaus AM 186183853 / 110
  64. 64. Estruturas de dadosDataframes1 # 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 RJ10 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$pop2.7e6] # populações maiores que 2.7 mi hab20 [1] 11376685 6390290 271069854 / 110
  65. 65. ConteúdoLinguagem RInformações PreliminaresSintaxe do RSímbolosVetoresInstruções de ControleFunçõesOperadoresEstruturas de dadosObjetos e ClassesGráficosPacotes e Dados do R55 / 110
  66. 66. Objetos e ClassesR é uma linguagem orientada a objetosCada objeto em R tem um tipoE cada objeto em R é membro de uma classeJá encontramos diferentes classes: vetores de caracteres, vetoresnuméricos, dataframes, listas, ...1 class(1:10)2 [1] integer3 class(w)4 [1] array5 class(v)6 [1] numeric7 class(top6pop)8 [1] data.frame9 class(e)10 [1] list11 class(class)12 [1] function55 / 110
  67. 67. Objetos e ClassesModelos e fórmulasUm modelo é uma forma concisa de descrever um conjunto dedados, usualmente por meio de uma fórmula matemáticaAlgumas vezes o objetivo é construir um modelo preditivo baseado emdados disponíveis para avaliar novos dadosOutras vezes o objetivo é constrir um modelo descritivo que auxilie nomelhor entendimento dos dadosO R possui uma notação específica para decrever relações entrevariáveisSuponha uma variável y onde assumimos uma dependência linear deoutras variáveis x1,x2,··· ,xn, resultando no modeloy = c1x1 +c2x2 +··· +cnxn +εEm R, podemos escrever essa relação como um objeto fórmula1 y ~ x1 + x2 + ... + xn56 / 110
  68. 68. Objetos e ClassesModelos e fórmulasVamos analisar o seguinte exemplo1 # 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.288835010 ...11 20 5.0000000 7.43226521213 # 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
  69. 69. Objetos e ClassesModelos e fórmulas1 # Vamos analisar o objeto xy.lm (modelo linear)2 xy.lm34 Call:5 lm(formula = y ~ x, data = xy)67 Coefficients:8 (Intercept) x9 -2.926 2.0491011 # Observe os coeficiente e compare com o modelo y = 2*x - 3 + rnorm(20)58 / 110
  70. 70. Objetos e ClassesModelos e fórmulas1 # Para maiores detalhes, use a função summary()2 summary(xy.lm)34 Call:5 lm(formula = y ~ x, data = xy)67 Residuals:8 Min 1Q Median 3Q Max9 -2.57694 -0.45741 0.04638 0.62709 1.808211011 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 11718 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-1059 / 110
  71. 71. Objetos e ClassesModelos e fórmulas1 # predict.lm() avalia os dados do dataframe xy no modelo xy.lm2 xy.pr=predict.lm(xy.lm)34 # Usamos algumas ferramentas gráficas para visualizar5 plot(x,y,col=blue); lines(x,xy.pr,col=red)60 / 110
  72. 72. ConteúdoLinguagem RInformações PreliminaresSintaxe do RSímbolosVetoresInstruções de ControleFunçõesOperadoresEstruturas de dadosObjetos e ClassesGráficosPacotes e Dados do R61 / 110
  73. 73. GráficosR inclui vários pacotes para a visualização de dadosSe você é familiarizado com planilhas eletrônicas, vocÊ perceberáque o R pode gerargráficos de barrasgráficos de linhashistogramasgráficos de dispersão...Vamos verificar alguns casos por meio de exemplos61 / 110
  74. 74. Gráficos1 # 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
  75. 75. Gráficos1 # 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
  76. 76. Gráficos1 # Histograma de uma série dados com distribuição normal2 x = rnorm(1000)3 hist(x,col=yellow,breaks=40)64 / 110
  77. 77. Gráficos1 # Um gráfico de barras2 barplot(c(2,4,7,5,3,1),col=lightblue)65 / 110
  78. 78. Gráficos1 # Gráfico de pizza2 pie(1:6, col = rainbow(6), labels= LETTERS[1:6], radius = 0.9)66 / 110
  79. 79. Gráficos1 # Gráfico de densidade2 x = rnorm(200)3 plot(density(x),col=red,lwd=2)67 / 110
  80. 80. Gráficos1 # 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
  81. 81. ConteúdoLinguagem RInformações PreliminaresSintaxe do RSímbolosVetoresInstruções de ControleFunçõesOperadoresEstruturas de dadosObjetos e ClassesGráficosPacotes e Dados do R69 / 110
  82. 82. Pacotes e Dados do RDadosO R possui pacotes de dados internos, usados principamente parademos e desenvolvimento de pacotes1 # Os pacotes de dados disponíveis são listados através do comando2 data()3 Data sets in package datasets:45 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 Weaving10 women Average Heights and Weights for American Women111213 Use data(package = .packages(all.available = TRUE))14 to list the data sets in all *available* packages.69 / 110
  83. 83. Pacotes e Dados do RDados1 # 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.0910 # Operando com os dados11 class(trees)12 [1] data.frame13 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
  84. 84. Pacotes e Dados do RDados1 # 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 125010 [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] ts71 / 110
  85. 85. Pacotes e Dados do RPacotesUm pacote é um conjunto de funções, arquivos de ajuda e arquivosde dados empacotados juntosPacotes em R são similares aos modulos em Perl, bibliotecas em C eclasses em JavaTipicamente, todas as funções em um pacote estão relacionadasentre siO pacote stats agrupa funções de análise estatística1 # Carrega os pacote -- comandos equivalentes2 library(stats)3 require(stats)45 # Para maiores informações6 library(help=stats)7 ?stats72 / 110
  86. 86. Pacotes e Dados do RPacotesR oferece um grande número de pacotesAnálise gráficaAplicações industriaisCiências sociais....Alguns pacotes veem com o R, outros são instalados através derepositórios73 / 110
  87. 87. Pacotes e Dados do RPacotes1 # Pacotes carregados automaticamente2 getOption(defaultPackages)3 [1] datasets utils grDevices graphics methods stats45 # Pacotes disponíveis para serem carregados6 (.packages(all.available=TRUE))7 [1] ade4 calibrate clusterSim corrgram8 [6] Defaults ellipse gclus Hmisc9 [11] nutshell quantmod R2HTML RColorBrewer10 [16] seriation TSP TTR xts11 [21] ape biclust bitops cba12 [26] colorspace dataframes2xls e1071 emoa1314 # Instalação de pacotes -- repositórios online15 install.packages(psy)1617 # Remoção de pacotes18 remove.packages(c(tree, maptree),.Library)74 / 110
  88. 88. ConteúdoAnálise de CasosAjuste de CurvasVazão da Represa de FurnasAnálise de Adubação da SojaComputação Simbólica no R75 / 110
  89. 89. Ajuste de CurvasVamos 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.090010 6 100 0.27001112 pres = pressure$pressure # cria variáveis auxiliares13 temp = pressure$temperature14 plot(pres~temp, ylim=c(-50,400)) # gráfico dos dados75 / 110
  90. 90. Ajuste de Curvas1 # 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úbico56 summary(lm1)7 summary(lm2)8 summary(lm3)910 # 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
  91. 91. Ajuste de Curvas77 / 110
  92. 92. ConteúdoAnálise de CasosAjuste de CurvasVazão da Represa de FurnasAnálise de Adubação da SojaComputação Simbólica no R78 / 110
  93. 93. Vazão da Represa de FurnasAnálise gráfica da série histórica (1931-2010) da vazão naturalmensal da represa de FurnasFonte: http://www.ons.org.br/operacao/vazoes_naturais.aspxPlanilha eletrônica contendo as séries de vazões naturais médiasmensais78 / 110
  94. 94. Vazão da Represa de Furnas1 #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?789 # Dados das vazões na planilha10 # Vazoes_Mensais_1931_2010.xls11 #12 library(gdata) # suporte para leitura de planilhas13 v - read.xls(xls=./data/Vazoes_Mensais_1931_2010.xls,sheet=1)14 View(v)1516 ano - v[ANO] # primeira coluna17 vaz - v[,-1] # todos os dados exceto a 1a coluna181920 # 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
  95. 95. Vazão da Represa de Furnas1 # 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
  96. 96. Vazão da Represa de Furnas1 # 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
  97. 97. Vazão da Represa de Furnas1 # 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
  98. 98. ConteúdoAnálise de CasosAjuste de CurvasVazão da Represa de FurnasAnálise de Adubação da SojaComputação Simbólica no R83 / 110
  99. 99. Análise de Adubação da SojaExperimento 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 totalFonte: http://www.leg.ufpr.br/~walmes/83 / 110
  100. 100. Análise de Adubação da Soja1 # Leitura dos dados no arquivo soja.txt que encontra-se no diretório data2 #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 linhas10 # e as variáveis correspondendo às colunas11 #12 soja - read.table(./data/soja.txt,header=TRUE)1314 View(soja) # visualização dos dados1516 # 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 registros84 / 110
  101. 101. Análise de Adubação da Soja1 # 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 631011 names(soja)12 [1] potassio agua bloco rengrao pesograo kgrao pgrao ts13 [9] nvi nv85 / 110
  102. 102. Análise de Adubação da Soja1 # Acessando informações das variáveis ($)23 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 V910 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.051617 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 18086 / 110
  103. 103. Análise de Adubação da Soja1 # 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 nomes56 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.501112 # Para desanexar a base de dados13 detach(soja)14 rengrao15 Error: object rengrao not found87 / 110
  104. 104. Análise de Adubação da Soja1 # 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 18056 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.43200910 tapply(rengrao,list(agua),mean)11 37.5 50 62.512 21.6956 25.1040 27.49801314 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.14688 / 110
  105. 105. Análise de Adubação da Soja1 # O comando with avalia uma expressão em uma base de dados2 # Assim, não precisamos anexar soja34 # 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.4320089 with(soja, tapply(rengrao, list(agua), mean))10 37.5 50 62.511 21.6956 25.1040 27.49801213 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.14689 / 110
  106. 106. Análise de Adubação da Soja1 # 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)567 # Selecionando subconjunto dos dados por valores das respostas8 subset(soja, rengrao15)9 subset(soja, rengrao15 pesograo11)90 / 110
  107. 107. Análise de Adubação da Soja1 # 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. 108. Análise de Adubação da Soja1 # Boxplot (subconjuntos e cores)2 boxplot(rengrao~potassio, data=subset(soja, agua==50))3 boxplot(rengrao~potassio, data=soja, col=yellow)92 / 110
  109. 109. Análise de Adubação da Soja1 # 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
  110. 110. Análise de Adubação da Soja1 # 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
  111. 111. Análise de Adubação da Soja1 # 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
  112. 112. Análise de Adubação da Soja1 # Mais análise gráfica: rendimento em função de potassio para cada grupo de água2 require(lattice) # biblioteca para gráficos mais elaborados34 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. 113. ConteúdoAnálise de CasosAjuste de CurvasVazão da Represa de FurnasAnálise de Adubação da SojaComputação Simbólica no R97 / 110
  114. 114. Computação Simbólica no REm R podemos calcular as derivadas (simbólicas) de expressõessimples1 # Operações simbólicas com expressões simples2 rm(list=ls()) # limpa o espaço de trabalho34 # Cria uma expressão simbólica5 f = expression(cos(x) + x * sin(x))6 class(f)7 [1] expression89 # Avalia a expressão, mas x ainda não exite...10 eval(c)11 Error in eval(expr, envir, enclos) : object x not found1213 # 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.0000000097 / 110
  115. 115. Computação Simbólica no R1 # O grafico de f -- o rótulo de y éuma expressão2 plot(ef~x,type=b, ylab=f, col=violetred4)98 / 110
  116. 116. Computação Simbólica no R1 # Derivando f simbolicamente usando o comando D()2 D(f) # faltou o x3 Error in .Internal(D(expr, name)) : name is missing4 D(f,x)5 sin(x) + x * cos(x) - sin(x)67 # 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 }1314 DD(f,x,1)15 sin(x) + x * cos(x) - sin(x)1617 DD(f,x,2)18 cos(x) + (cos(x) - x * sin(x)) - cos(x)1920 DD(f,x,4)21 -(cos(x) + (cos(x) + (cos(x) - x * sin(x))) + cos(x) - cos(x))99 / 110
  117. 117. Computação Simbólica no R1 # 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))56 plot(eval(f4)~x, main=f4, type=b) # observe o título do gráfico100 / 110
  118. 118. ConteúdoInterface com Outras LinguagensR e outras Linguagens de ProgramaçãoCombinando R com C e Fortran101 / 110
  119. 119. R e outras Linguagens de ProgramaçãoEm R, podemos reutilizar códigos desenvolvidos em outraslinguagensR e C (ou C++)R e FortranR 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. 120. ConteúdoInterface com Outras LinguagensR e outras Linguagens de ProgramaçãoCombinando R com C e Fortran102 / 110
  121. 121. Combinando R com C e FortranO R é relativamente lento em algoritmos iterativos que exigem laços(loops) repetidas vezesUma 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 RVamos considerar um problema bem simples, elevar ao quadradooselementos de um vetor x = (x1,x2,...,xn−1,xn)q(x) = (x21 ,x22 ,...,x2n−1,x2n )102 / 110
  122. 122. Combinando R com C e FortranAqui temos o código em linguagem C com uma solução para oproblemaO 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;67 for (i=0; in; i++)8 x[i] = x[i] * x[i];9 }103 / 110
  123. 123. Combinando R com C e FortranAqui temos o a mesma função em uma subrotina em FortranEla 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)34 integer n5 double precision x(n)6 integer i78 do i = 1, n9 x(i) = x(i) ** 210 enddo1112 end104 / 110
  124. 124. Combinando R com C e FortranA compilação para a geração de bibliotecas dinâmicas, é feita em umterminal 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 -lR678 # Compila o código em Fortran9 R CMD SHLIB pot2f.f10 # 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 -lRSe a compilação funcionar corretamente, serão gerados os arquivospot2c.so e pot2f.so105 / 110
  125. 125. Combinando R com C e FortranVoltando ao R, podemos carregar as bibliotecas1 # Carregas as biblotecas geradas2 dyn.load(pot2c.so)3 dyn.load(pot2f.so)45 # 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 FALSE10 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 TRUE106 / 110
  126. 126. Combinando R com C e FortranExecutando o função em C1 # Para testar, vamos criar um vetor x2 x=c(1,2,3,4,5)3 x4 [1] 1 2 3 4 556 typeof(x) # x deve ser double, assim como o argumento na função em C7 [1] double89 # A chamada da função em R éfeita pelo comando .C()10 .C(pot2c, n=length(x), x=x)11 $n12 [1] 51314 $x15 [1] 1 4 9 16 25107 / 110
  127. 127. Combinando R com C e FortranExecutando o subrotina em Fortran1 # A chamada da subrotina em R éfeita pelo comando .Fortran()2 .Fortran(pot2f, n=length(x), x=x)3 $n4 [1] 556 $x7 [1] 1 4 9 16 25108 / 110
  128. 128. Combinando R com C e FortranUma solução mais agradável é criar uma função envelopePermite checar alguns erros em R, o que é mais fácil que em CPermite que alguns argumento calculados não sejam mostradosPermite retornar somente o que o necessário1 # 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 }1011 # Executando a função12 pot2c(x)13 [1] 1 4 9 16 25109 / 110
  129. 129. 110 / 110

×