SlideShare uma empresa Scribd logo
1 de 99
Baixar para ler offline
Faculdade de Economia
          Universidade do Porto




Introdu¸˜o ` Programa¸˜o em R
       ca a          ca




                Lu´ Torgo
                  ıs
            ltorgo@liacc.up.pt
    Grupo de Matem´tica e Inform´tica
                  a             a




           Outubro de 2006
©   L. Torgo, 2006. A licence is granted for personal study and classroom use. Redistri-

bution in any other form is prohibited.

©                   ´
    L. Torgo, 2006. E concedida licen¸a de utiliza¸˜o deste documento para uso pessoal
                                     c            ca

e para ensino. A re-distribui¸ao em qualquer outro tipo de formato ´ proibida.
                             c˜                                    e
Conte´ do
     u
1 Introdu¸˜o ao Ambiente
          ca                    R                                                                                                                 7
  1.1 Instala¸˜o do R . . . .
              ca                . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   7
  1.2 Come¸ar a usar o R .
            c                   . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   7
  1.3 Ajuda sobre o R . . .     . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   9
  1.4 “Packages” do R . . . .   . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   9

2 Fundamentos da Linguagem R                                                                                                                      11
  2.1 Os objectos do R . . . . . . .          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   11
  2.2 Vectores . . . . . . . . . . . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   12
  2.3 Opera¸˜es com Vectores . . .
              co                              .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   14
  2.4 Factores . . . . . . . . . . . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   15
  2.5 Sequˆncias . . . . . . . . . . .
            e                                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   18
  2.6 Indexa¸˜o . . . . . . . . . . .
               ca                             .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   20
  2.7 Matrizes . . . . . . . . . . . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   22
  2.8 Arrays . . . . . . . . . . . . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   26
  2.9 Listas . . . . . . . . . . . . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   27
  2.10 Data Frames . . . . . . . . .          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   29
  2.11 S´ries Temporais . . . . . . .
        e                                     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   31
       2.11.1 S´ries Regulares . . .
                 e                            .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   31
       2.11.2 S´ries Irregulares . . .
                 e                            .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   36

3 Programa¸˜o em R
             ca                                                                                                                                   45
  3.1 Interac¸˜o com o Utilizador . . . . . . .
              ca                                                      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   45
  3.2 Estruturas de Controlo da Linguagem R                           .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   46
      3.2.1 Instru¸˜es Condicionais . . . . .
                   co                                                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   46
      3.2.2 Instru¸˜es Iterativas . . . . . . .
                   co                                                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   48
      3.2.3 Evitando ciclos . . . . . . . . . .                       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   50
  3.3 Fun¸˜es . . . . . . . . . . . . . . . . . .
          co                                                          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   52
      3.3.1 Criar fun¸˜es . . . . . . . . . . .
                      co                                              .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   52
      3.3.2 Ambientes e “scope” de vari´veis
                                           a                          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   53
      3.3.3 Argumentos de fun¸˜es . . . . .
                                 co                                   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   54
      3.3.4 Lazy evaluation . . . . . . . . . .                       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   56
      3.3.5 Algumas fun¸˜es uteis . . . . . .
                          co ´                                        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   56
  3.4 Objectos, Classes e M´todos . . . . . . .
                            e                                         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   58
  3.5 Depura¸˜o de Programas em R . . . . .
              ca                                                      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   60

4 Manipula¸˜o de Dados
           ca                                                                                                                                     63
  4.1 Carregar dados para o R . . . . . . . . . . . . . . .                                   .   .   .   .   .   .   .   .   .   .   .   .   .   63
      4.1.1 De ficheiros de texto . . . . . . . . . . . . .                                    .   .   .   .   .   .   .   .   .   .   .   .   .   63
      4.1.2 Da Internet . . . . . . . . . . . . . . . . . .                                   .   .   .   .   .   .   .   .   .   .   .   .   .   64
      4.1.3 Do Excel . . . . . . . . . . . . . . . . . . .                                    .   .   .   .   .   .   .   .   .   .   .   .   .   65
      4.1.4 De bases de dados . . . . . . . . . . . . . .                                     .   .   .   .   .   .   .   .   .   .   .   .   .   65
  4.2 Sumariza¸˜o de dados . . . . . . . . . . . . . . . .
               ca                                                                             .   .   .   .   .   .   .   .   .   .   .   .   .   67
  4.3 F´rmulas . . . . . . . . . . . . . . . . . . . . . . .
        o                                                                                     .   .   .   .   .   .   .   .   .   .   .   .   .   70
  4.4 Visualiza¸˜o de dados . . . . . . . . . . . . . . . .
               ca                                                                             .   .   .   .   .   .   .   .   .   .   .   .   .   71
      4.4.1 Gr´ficos Univariados . . . . . . . . . . . . .
                a                                                                             .   .   .   .   .   .   .   .   .   .   .   .   .   73
      4.4.2 Gr´ficos de 3 Vari´veis . . . . . . . . . . . .
                a              a                                                              .   .   .   .   .   .   .   .   .   .   .   .   .   74
      4.4.3 Gr´ficos Multivariados . . . . . . . . . . . .
                a                                                                             .   .   .   .   .   .   .   .   .   .   .   .   .   78
      4.4.4 Gr´ficos Condicionados . . . . . . . . . . .
                a                                                                             .   .   .   .   .   .   .   .   .   .   .   .   .   81
      4.4.5 Interac¸˜o com Gr´ficos . . . . . . . . . . .
                    ca         a                                                              .   .   .   .   .   .   .   .   .   .   .   .   .   83
      4.4.6 Adicionar Informa¸˜o a Gr´ficos Existentes
                               ca        a                                                    .   .   .   .   .   .   .   .   .   .   .   .   .   84
4.4.7   Parˆmetros de Gr´ficos . . . . . . . . . . . . . . . . . . . . . . . .
                    a              a                                                     90
         4.4.8                         a         a     ´
                 Dividir a Janela de Gr´ficos em V´rias Areas . . . . . . . . . . . .     91

Referˆncias
     e                                                                                   95
´
Indice                                                                                   97
Pref´cio
    a

Este documento tem como objectivo principal fornecer uma introdu¸˜o ` programa¸˜o
                                                                         ca a           ca
usando a linguagem R. A escolha desta linguagem como ve´         ıculo para aprender a pro-
gramar prende-se com os objectivos do curso em que esta disciplina se insere. Uma vez
que este curso tem a an´lise de dados e o data mining como um dos assuntos centrais,
                         a
o R sendo tamb´m um ambiente de an´lise explorat´ria de dados, permite uma melhor
                e                       a              o
articula¸˜o com outras disciplinas.
        ca
    A escolha do R tem ainda outros motivos relacionados com o facto de este ser um
software gratuito e de c´digo aberto. Estas caracter´
                         o                               ısticas, em conjunto com as suas
reconhecidas qualidades, fazem dele uma ferramenta quase ideal para aprender a progra-
mar dentro dum contexto de an´lise de dados e sistemas de apoio ` decis˜o. Ao usarem
                                 a                                     a     a
uma ferramenta deste g´nero como plataforma de implementa¸˜o dos conceitos apren-
                         e                                          ca
didos, os alunos poder˜o facilmente, pelo seu car´cter gratuito, levar o que aprenderam
                       a                           a
para o cen´rio profissional em que se enquadram ou venham a enquadrar. Al´m disso,
           a                                                                      e
as suas caracter´
                ısticas de c´digo aberto ir˜o facilitar a eventual necessidade de adaptar
                            o              a
algum dos muitos m´todos dispon´
                     e             ıveis no R, para assim melhor os adequarem aos seus
interesses/objectivos.
7


1     Introdu¸˜o ao Ambiente R
             ca
O R (R Development Core Team, 2006) ´ ao mesmo tempo uma linguagem de programa-
                                           e                                                           O que ´ o R?
                                                                                                             e
ca
¸˜o e um ambiente para computa¸˜o estat´
                                   ca        ıstica e gr´ficos. Trata-se de uma linguagem de
                                                        a
programa¸˜o especializada em computa¸˜o com dados. Uma das suas principais caracte-
            ca                            ca
r´
 ısticas ´ o seu car´cter gratuito e a sua disponibilidade para uma gama bastante variada
         e          a
de sistemas operativos. Neste documento iremos concentrar a nossa aten¸˜o na vers˜o
                                                                              ca          a
Windows, mas basicamente tudo o que aqui ´ descrito tamb´m se aplica `s outras vers˜es,
                                               e               e            a           o
dadas as muito reduzidas diferen¸as entre as vers˜es para as diversas plataformas.
                                    c                 o
    Apesar do seu car´cter gratuito o R ´ uma ferramenta bastante poderosa com boas
                        a                   e
capacidades ao n´  ıvel da programa¸˜o e um conjunto bastante vasto (e em constante
                                      ca
crescimento) de packages que acrescentam bastantes potencialidades ` j´ poderosa vers˜o
                                                                         a a              a
base do R.
    O R ´ uma variante da linguagem S com a qual John Chambers (Chambers, 1998)
          e
ganhou o prestigiado pr´mio de software da organiza¸˜o ACM.
                          e                               ca

1.1    Instala¸˜o do R
              ca
Embora o R esteja instalado no sistema inform´tico da FEP, dado o seu car´cter gra-
                                                   a                          a
tuito, os alunos poder˜o instalar este software nos seus computadores em casa. Para isso
                        a
necessitar˜o simplesmente de ligar o computador ` Internet e seguir os passos que des-
           a                                          a
crevemos em seguida. Caso n˜o pretenda realizar a instala¸˜o do R no seu computador,
                              a                             ca
poder´ avan¸ar para a pr´xima sec¸˜o.
      a      c             o         ca
    Para instalar o R os alunos dever˜o come¸ar por ligar o seu computador ` Internet.
                                       a       c                             a
Ap´s esta liga¸˜o dever´ ser feito o download do R a partir do site desta aplica¸˜o,
   o           ca         a                                                        ca                  Download do R
http://www.r-project.org. Neste site dever´ ser seguido o link com o nome CRAN
                                                 a
no menu dispon´ ` esquerda. Depois de escolher um dos muitos locais espalhados pelo
                 ıvel a
mundo para fazer o download, dever´ seguir o link Windows (95 and later) dispon´
                                       a                                            ıvel
na sec¸˜o Precompiled Binary Distributions. No ´cran seguinte, deve “entrar” na pasta
       ca                                            e
base e fazer o download do ficheiro R-2.3.1-win32.exe1 .
    Uma vez efectuado o download do ficheiro mencionado acima, dever´ proceder-se `
                                                                        a              a
instala¸˜o do R , bastando para isso executar o ficheiro (carregando duas vezes em cima
       ca                                                                                              Instala¸˜o do R
                                                                                                              ca
dele no Explorer). De notar que em vers˜es mais recentes do Windows esta instala¸˜o
                                           o                                        ca
poder´ ter de ser feita pelo utilizador Administrador, por quest˜es de permiss˜es.
      a                                                           o             o

1.2    Come¸ar a usar o R
           c
Para se executar o R basta usar ou o ´ıcone que normalmente est´ dispon´ no desktop
                                                                  a       ıvel                         Iniciar o R
do Windows, ou ent˜o usar o respectivo item no menu “Start”2 .
                     a
    A execu¸˜o do R faz aparecer a janela desta aplica¸˜o de que se pode ver um exemplo
            ca                                        ca
na Figura 1.
    `
    A parte os menus que iremos explorar mais tarde, esta janela apresenta o prompt
                          a              ´
do R (> ), com o cursor ` sua frente. E aqui que vamos introduzir os comandos que                      O prompt do R
pretendemos que o R execute. Podemos come¸ar por ver um pequeno exemplo do tipo de
                                             c
interac¸˜o que vamos ter com o R, escrevendo o seguinte comando no prompt e carregando
       ca
em seguida na tecla Enter (esta ´ a forma de mandar o R executar o comando que
                                    e                                                                  Executar comandos
acabamos de escrever),

> R.version
platform i386-pc-mingw32
arch     i386
os       mingw32
system   i386, mingw32
status
   1 O nome do ficheiro poder´ variar em vers˜es posteriores do R. Na altura da escrita deste texto a
                               a               o
vers˜o do R dispon´
    a             ıvel era a 2.3.1 e da´ o nome do ficheiro.
                                        ı
   2 Na FEP o R est´ dispon´
                    a        ıvel seguindo o percurso de menus: Start->Programs->Aplications->R.
8                                                1          ¸˜
                                                                            INTRODUCAO AO AMBIENTE R




                                                           Figura 1: O ambiente R.

                       major    2
                       minor    3.1
                       year     2006
                       month    06
                       day      01
                       svn rev 38247
                       language R
                       version.string Version 2.3.1 (2006-06-01)
                          O comando R.version ao ser executado fez aparecer uma s´rie de informa¸˜o sobre
                                                                                   e            ca
                       a vers˜o do R bem como sobre o computador onde o R est´ a ser executado.
                             a                                                a
Terminar o R              Para terminar a execu¸˜o do R basta executar o seguinte comando,
                                               ca
                       > q()
                           Ao executar este comando ir´ aparecer uma caixa de di´logo como a apresentada na
                                                         a                         a
Continuar o            Figura 2. Se respondermos Yes a esta pergunta o R vai guardar a informa¸˜o contida na
                                                                                                 ca
trabalho mais tarde    mem´ria do computador num ficheiro, de modo a que da pr´xima vez que executarmos o
                            o                                                      o
                       R no local onde esse ficheiro ´ guardado, ele vai permitir-nos continuar o nosso trabalho
                                                      e
                       exactamente de onde o estamos a abandonar ao executar o comando q(). A informa¸˜o    ca
                       guardada consiste basicamente na hist´ria de comandos que executamos nesta sess˜o que
                                                               o                                         a
                       agora terminamos, bem como os objectos que criamos na nossa sess˜o. O resultado ser´
                                                                                            a                  a
                       que o R vai criar 2 ficheiros: um chamado .Rhistory contendo a lista dos comandos que
                       executamos, e outro chamado .RData contendo os objectos criados na sess˜o. Gravar a
                                                                                                  a
                       sess˜o s´ ter´ interesse se de facto pretendermos continuar o que est´vamos a fazer mais
                           a o      a                                                        a
                       tarde. Na maior parte das vezes vamos escolher a op¸˜o No que ir´ abandonar o R sem
                                                                             ca            a
                       guardar o estado em que est´vamos. Os ficheiros com o estado da sess˜o s˜o sempre
                                                       a                                         a a
                       gravados no direct´rio actual onde o R est´ a funcionar. Para saber o direct´rio actual
                                           o                       a                                o
                       do R basta fazer no prompt,
                       > getwd()
                           Em resposta a este comando o R ir´ apresentar no ´cran o direct´rio actual. Para o
                                                             a              e             o
Alterar o direct´rio
                o      alterar poder-se-´ ou usar a op¸˜o Change dir... do menu File, ou ent˜o usar a fun¸˜o
                                        a             ca                                     a            ca
actual                 setwd() conforme ilustrado no exemplo seguinte,
                       > setwd('U:My DocumentsAulasR')
                         Note a utiliza¸˜o de dois caracteres , em vez do unico caracter como ´ costume em
                                       ca                                   ´                   e
                       ambientes Windows3 .
                          3 Acrescente-se a t´
                                             ıtulo de curiosidade que poder´ ser usado em vez destes dois caracteres um unico
                                                                           a                                            ´
                       caracter “/”.
1.3   Ajuda sobre o R                                                                    9




                                Figura 2: Abandonar o R.


1.3    Ajuda sobre o R
O R tem um sistema de ajuda bastante elaborado que lhe permitir´ obter muita informa-
                                                                 a
ca
¸˜o extra sobre a linguagem, bem como muitos outros aspectos que lhe est˜o associados.
                                                                           a                  Obter ajuda no R
   Nas vers˜es Windows do R, a forma mais f´cil de obter ajuda ´ atrav´s da utiliza¸˜o
            o                                 a                  e       e         ca
do menu Help dispon´  ıvel na janela da aplica¸˜o R. Atrav´s deste menu ´ poss´
                                              ca          e                e  ıvel por
exemplo, escolher a op¸˜o Html help o que far´ lan¸ar um browser onde poder´ tirar
                        ca                       a   c                          a
partido de uma s´rie de manuais e outros tipo de ajuda dispon´
                 e                                            ıveis no R.
   No entanto, se pretende simplesmente obter ajuda sobre uma fun¸˜o em particular
                                                                      ca
do R, a forma mais simples ser´ provavelmente usar a fun¸˜o help(),
                               a                         ca

> help(sqrt)

     Este comando ir´ fazer aparecer uma pequena janela com todo um conjunto de infor-
                      a
ma¸˜es uteis sobre a fun¸˜o escolhida, que vai da simples descri¸˜o dos seus argumentos
     co ´                   ca                                   ca
at´ exemplos de utiliza¸˜o, bem como fun¸˜es relacionadas. Em alternativa, poder´
   e                        ca               co                                         a
introduzir antes “? sqrt”, produzindo exactamente o mesmo efeito.
     Quando n˜o sabemos o nome concreto da fun¸˜o sobre a qual preciamos de ajuda,
               a                                   ca
podemos usar como alternativas as fun¸oes apropos() e help.search(). Genericamente,
                                       c˜
ambas produzem uma lista das fun¸˜es do R que contˆm referˆncias ao texto que incluimos
                                   co                e       e
como argumento destas fun¸˜es. Experimente por exemplo fazer, apropos(’model’), ou
                               co
help.search(’model’).
     Para d´vidas mais complexas poder´ ainda consultar a muita documenta¸˜o gratuita
            u                           a                                   ca
dispon´ ıvel no site do R (www.r-project.org), ou a mailing list de apoio dispon´ ıvel no
mesmo site. Se optar por esta ultima alternativa recomenda-se que antes de colocar
                                  ´
qualquer pergunta fa¸a uma procura pelos arquivos da lista para evitar colocar quest˜es
                        c                                                             o
j´ respondidas, o que nem sempre ´ bem recebido pelas pessoas que se voluntariam para
 a                                  e
ajudar.
     Finalmente uma alternativa poderosa que junta v´rias destas formas de ajuda do R
                                                       a
´ utilizar no R a fun¸˜o RSiteSearch(). Esta fun¸˜o faz lan¸ar um browser que ir´
e                        ca                           ca         c                      a
mostrar o resultado da procura da “string” que passar como argumento ` fun¸˜o. O
                                                                           a     ca
resultado da procura envolve toda a ajuda de todas as fun¸˜es do R, ajuda nas mailing
                                                            co
lists, bem como em outros documentos. Por exemplo, se pretendo saber o que existe
nestes locais sobre redes neuronais, poderia fazer a seguinte procura,

> RSiteSearch('neural networks')

1.4 “Packages” do R
Uma instala¸˜o do R vem j´ com um conjunto de packages instaladas. Estas packages n˜o
            ca             a                                                           a
s˜o mais do que agrega¸˜es de fun¸˜es que foram criadas por algu´m que as disponibilizou
 a                      co         co                            e
a
` comunidade de forma gratu´ Qualquer pessoa pode criar as suas packages e submetˆ-
                              ıta.                                                      e
las ao portal do R para que sejam consideradas na lista de packages dispon´      ıveis a´ı.
Quando se executa o R s´ algumas fun¸˜es est˜o dispon´
                           o             co       a        ıveis de imediato. Essas s˜oa
as fun¸˜es inclu´
      co         ıdas nas packages que foram julgadas mais importantes ou de uso mais
comum e que s˜o automaticamente carregadas quando se executa o R. Em qualquer
                 a
altura poderemos “carregar” uma package que contenha fun¸˜es extra que necessitemos
                                                             co
para o nosso trabalho. Para tal ser poss´ ıvel a package dever´ estar instalada no nosso
                                                              a
computador. Se tal n˜o fˆr o caso teremos que fazer o download da mesma e instal´-la.
                       a o                                                           a
Este processo ´ simples, desde que o seu computador esteja ligado ` Internet.
               e                                                    a
10                                                1           ¸˜
                                                                       INTRODUCAO AO AMBIENTE R


                    Para instalar uma nova package podemos usar a fun¸˜o install.packages(), que
                                                                        ca                                                Instalar novas
                leva como argumento o nome da package a instalar4 . Depois de indicado um reposit´rio
                                                                                                   o                      packages
                de onde fazer o download da package o R ir´ encarregar-se de todo o processo, inclusiv´
                                                           a                                           e
                da sua instala¸˜o no seu computador.
                               ca
Usar packages       Para utilizar packages que estejam dispon´
                                                             ıveis no seu sistema basta usar a fun¸˜o
                                                                                                    ca
                library(), por exemplo,

                library(rpart)

                   Esta instru¸˜o faz com que a partir de agora passem a estar dispon´
                              ca                                                     ıveis para utiliza¸˜o,
                                                                                                       ca
                todos os objectos (fun¸˜es, dados, etc.) definidos nessa package. Cada package instalada
                                       co
                tem uma ajuda espec´  ıfica que pode ser obtida no sistema de ajuda HTML do R que foi
                descrito na Sec¸˜o 1.3.
                               ca




                  4 Na   realidade podemos instalar v´rias indicando um vector (c.f. Sec¸˜o 2.2) com nomes de packages.
                                                     a                                  ca
11


2     Fundamentos da Linguagem R
2.1   Os objectos do R
O R ´ uma linguagem baseada em objectos. Isto quer dizer que tudo o que n´s vamos
     e                                                                      o
usar no R est´ guardado na mem´ria do computador sob a forma de um objecto. Todos
             a                   o
os objectos em R tˆm um nome associado e podem armazenar diferentes tipos de coisas
                   e                                                                      Objectos do R
(n´meros, texto, vectores, matrizes, express˜es, chamadas a fun¸˜es, etc.).
  u                                         o                  co
    Para armazenar algo num objecto usamos o operador de atribui¸˜o. Este operador
                                                                    ca                    Operador de
consiste num sinal < seguido por um sinal -, como se vˆ no exemplo apresentado em se-
                                                      e                                   atribui¸˜o
                                                                                                 ca
guida, em que guardamos o n´mero 4.5 no objecto que resolvemos chamar taxa.de.juro,
                             u

> taxa.de.juro <- 4.5

   Para ver o conte´do de um objecto (o que est´ guardado na mem´ria sob um deter-
                   u                           a                 o                        Ver o conte´ do de
                                                                                                     u
minado nome) basta digitar o nome do objecto no prompt do R, carregando em seguida        um objecto
em Enter. Como resposta o R mostra-nos o conte´do do objecto que lhe indicamos.
                                                  u
Por exemplo, suponhamos que queremos confirmar o conte´do do objecto taxa.de.juro,
                                                       u

> taxa.de.juro

[1] 4.5

    O estranho [1] que aparece antes do n´mero guardado em taxa.de.juro, tem o
                                              u
significado “esta linha est´ a mostrar o conte´do de taxa.de.juro a come¸ar no elemento
                          a                  u                          c
nº 1 do objecto”. O significado disto tornar-se-´ mais ´bvio quando virmos objectos que
                                                a     o
podem armazenar mais do que um elemento, como por exemplo um vector contendo 100
n´meros.
  u
    A opera¸˜o de atribui¸˜o ´ destrutiva no sentido que ao atribuir um novo valor a um
            ca            ca e
objecto j´ existente, vamos perder o conte´do que ele estava a armazenar anteriormente.
         a                                 u

> taxa.de.juro <- 3.9
> taxa.de.juro

[1] 3.9

   Tamb´m podemos atribuir express˜es num´ricas a objectos. O resultado de tal ope-
         e                          o       e                                             Express˜es
                                                                                                 o
ra¸˜o ´ o de que o resultado do c´lculo da express˜o ´ colocado no objecto, e n˜o a
  ca e                           a                a e                          a          num´ricas
                                                                                             e
express˜o propriamente dita,
       a

> z <- 5
> w <- z^2
> w

[1] 25

> i <- (z * 2 + 45)/2
> i

[1] 27.5

   Sempre que pretendemos atribuir o resultado de uma express˜o a um objecto e em
                                                             a
seguida ver o seu conte´do (como nos exemplos acima), podemos em alternativa usar a
                       u
seguinte sintaxe que nos poupa algum tempo,

> (w <- z^2)

[1] 25
12                                    2   FUNDAMENTOS DA LINGUAGEM R


                         Na realidade n˜o ´ necess´rio atribuir o resultado das express˜es a objectos. Isto s´
                                        a e       a                                    o                     o
                     far´ sentido se pretendermos usar o resultado do c´lculo mais tarde, por exemplo noutra
                        a                                               a
                     express˜o. Se pretendermos saber simplesmente o resultado do c´lculo, podemos usar o
                             a                                                        a
                     R como uma esp´cie de calculadora,
                                      e                                                                          O R como uma
                                                                                                                 calculadora
                     > (34 + 90)/12.5

                     [1] 9.92

                        Sempre que criamos um novo objecto usando a instru¸˜o de atribui¸˜o, ele ir´ ficar na
                                                                           ca            ca        a
                     mem´ria do computador. Como esta ´ limitada, poderemos apagar os objectos sempre
                          o                               e
Listar os objectos   que n˜o precisarmos mais deles. Podemos ver quais os objectos actualmente na mem´ria
                           a                                                                            o
em mem´ria
      o              do computador usando as fun¸˜es ls() ou objects(). Se j´ n˜o necessitamos de algum
                                                  co                          a a
                     dos objectos podemos ent˜o apag´-lo com a fun¸˜o rm() como nos exemplos apresentados
                                             a       a            ca
                     em seguida,

                     > ls()

                     [1] "i"                 "taxa.de.juro" "w"                 "z"

                     > rm(taxa.de.juro)
                     > rm(z, w)
                     > objects()

                     [1] "i"

Nomes v´lidos
       a                 O nome dos objectos pode ser formado por qualquer letra mai´scula ou min´scula,
                                                                                         u             u
                     os d´
                         ıgitos 0 a 9 (excepto no in´ do nome), e tamb´m o ponto final “.”. Os nomes dos
                                                     ıcio                  e
                     objectos em R s˜o sens´
                                      a      ıveis `s letras mai´sculas / min´sculas. Isto quer dizer que Cor
                                                   a            u            u
                     e cor s˜o dois objectos diferentes para o R. Note tamb´m que n˜o pode usar espa¸os
                             a                                                 e         a                 c
                     nos nomes dos objectos. Por exemplo, se pretende ter um objecto que guarda uma
                     determinada taxa de cˆmbio, poderia sentir-se tentado(a) a escolher o nome taxa de
                                             a
                     cˆmbio para o objecto, o que iria gerar um erro do R,
                      a

                     > taxa de c^mbio <- 0.05
                                a
                     Error: syntax error

                          Em alternativa poderia usar o seguinte nome que j´ seria v´lido,
                                                                           a        a

                     > taxa.de.c^mbio <- 0.05
                                a

                     2.2     Vectores
O que ´ um vector
      e              O objecto mais b´sico do R para guardar dados ´ o vector. Um vector ´ uma estrutura
                                      a                              e                    e
                     de dados que permite armazenar um conjunto de valores do mesmo tipo (por exemplo
                     n´meros) sob um mesmo nome. Esses elementos podem depois ser acedidos individu-
                       u
                     almente usando um esquema de indexa¸˜o que iremos descrever mais ` frente. Este
                                                              ca                            a
                     tipo de estrutura de dados ´ bastante util quando pretendemos armazenar v´rias coisas
                                                 e         ´                                   a
                     relacionadas na mem´ria do computador. Por exemplo, suponhamos que pretendemos
                                          o
                     guardar os lucros obtidos pela nossa empresa ao longo dos 12 meses do ano anterior.
                     Em vez de termos 12 objectos diferentes, cada um guardando o lucro em cada mˆs, uma
                                                                                                   e
                     vez que s˜o n´meros relacionados uns com os outros, faz mais sentido guard´-los todos
                              a u                                                              a
                     numa mesma estrutura de dados, que neste caso ser´ um vector com 12 n´meros. Em R,
                                                                       a                    u
                     mesmo quando atribu´  ımos um unico n´mero a um objecto (por exemplo fazendo x <-
                                                     ´      u
                     45), estamos de facto a criar um vector de n´meros com um unico elemento.
                                                                 u              ´
Modo e tamanho           Todos os vectores em R tˆm um modo e um tamanho. O modo determina o tipo de
                                                   e
dos vectores         valores guardado no vector. Em R podemos ter vectores com modo character, logical,
                     numeric e complex. Ou seja, podemos ter vectores para armazenar os seguintes tipos
                     de dados at´micos: conjuntos de caracteres, valores l´gicos (F ou T ou FALSE ou
                                  o                                         o
2.2   Vectores                                                                       13


TRUE)5 , n´meros inteiros ou reais, e n´meros complexos. O tamanho de um vector ´
             u                          u                                             e
o n´mero de elementos que ele cont´m, e pode ser obtido com a fun¸˜o length().
    u                               e                               ca
    Na maioria das situa¸˜es vamos criar vectores com mais do que um elemento. Para
                         co                                                                Criar vectores
isso precisamos de usar a fun¸˜o c() para indicar ao R os elementos que formam o vector
                             ca
separando-os por v´ırgulas,

> v <- c(4, 7, 23.5, 76.2, 80)
> v

[1]   4.0   7.0 23.5 76.2 80.0

> length(v)

[1] 5

> mode(v)

[1] "numeric"

    Todos os elementos de um vector tˆm que ser do mesmo tipo (modo). Caso tentemos
                                     e
criar um vector com elementos de tipo diferente o R vai for¸´-los a ser do mesmo tipo,
                                                           ca                              Coer¸˜o de tipos
                                                                                               ca
alterando-os. Vejamos um exemplo disso,

> v <- c(4, 7, 23.5, 76.2, 80, "rrt")
> v

[1] "4"      "7"     "23.5" "76.2" "80"       "rrt"

    Porque um dos elementos do vector era do tipo caracter, o R passou todos os outros
(que eram n´meros) para o tipo caracter, gerando assim um vector de conjuntos de
              u
caracteres (strings). Isto quer dizer que por exemplo o primeiro elemento desse vector ´
                                                                                       e
a string “4” e n˜o o n´mero 4, o que tem como consequˆncia, por exemplo, n˜o podermos
                a     u                                e                   a
usar este elemento numa express˜o num´rica.
                                  a       e
    As strings em R s˜o conjuntos de caracteres englobados por aspas ou plicas,
                      a

> w <- c("rrt", "ola", "isto e uma string")
> w

[1] "rrt"                   "ola"                   "isto e uma string"

    Todos os vectores podem ter um elemento especial que ´ o NA. Este valor representa
                                                          e                                Valores
um valor desconhecido. Por exemplo, se temos os lucros trimestrais de uma empresa          desconhecidos
guardados num vector, mas por alguma raz˜o desconhecemos o seu valor no terceiro
                                             a
trimestre, poder´
                ıamos usar a seguinte instru¸˜o para criar esse vector,
                                            ca

> lucros <- c(234000, 245000, NA, 124500)
> lucros

[1] 234000 245000         NA 124500

   Como j´ foi mencionado anteriormente, os elementos de um vector podem ser acedidos
           a
atrav´s de um ´
     e         ındice. Na sua forma mais simples este ´
                                                      ındice ´ um n´mero indicando o
                                                             e     u                       Aceder a um
elemento que pretendemos aceder. Esse n´mero ´ colocado entre parˆntesis rectos a
                                          u      e                    e                    elemento
seguir ao nome do vector,

> lucros[2]

[1] 245000
14                                    2   FUNDAMENTOS DA LINGUAGEM R


                        Usando esta forma de aceder aos elementos individuais de um vector podemos alterar     Alterar um elemen
                     o conte´do de um elemento particular de um vector,
                            u

                     > lucros[3] <- 45000
                     > lucros

                     [1] 234000 245000      45000 124500

Vectores vazios           O R permite-nos criar vectores vazios usando a fun¸˜o vector(),
                                                                            ca

                     > k <- vector()

Alterar tamanho de      O tamanho de um vector j´ existente pode ser alterado atribuindo mais elementos a
                                                     a
um vector            ´
                     ındices at´ agora inexistentes,
                               e

                     > k[3] <- 45
                     > k

                     [1] NA NA 45

                        Repare que os dois primeiros elementos do vector k, que anteriormente era um vector
                     vazio, ficaram com o valor NA ao colocarmos o valor 45 no terceiro elemento.
                        Para diminuirmos o tamanho de um vector podemos usar a instru¸˜o de atribui¸˜o.
                                                                                          ca           ca
                     Por exemplo,

                     > v <- c(45, 243, 78, 343, 445, 645, 2, 44, 56, 77)
                     > v

                      [1]    45 243   78 343 445 645      2    44   56   77

                     > v <- c(v[5], v[7])
                     > v

                     [1] 445      2

                        Atrav´s do uso de formas de indexa¸˜o mais poderosas que iremos explorar na Sec-
                              e                             ca
                     c˜o 2.6 vamos conseguir eliminar mais facilmente elementos particulares de um vector.
                     ¸a

                     2.3     Opera¸oes com Vectores
                                  c˜
                     Um dos aspectos mais poderosos da linguagem R ´ a possibilidade de “vectorizar” a
                                                                         e
Opera¸˜es com
     co              maioria das suas fun¸˜es. Isto quer dizer que a maioria das fun¸˜es dispon´
                                         co                                         co         ıveis no R ,
vectores             ao serem aplicadas a um vector, produzem como resultado um vector de resultados, que
                     ´ obtido aplicando a fun¸˜o a cada um dos elementos do vector. Vejamos um exemplo
                     e                       ca
                     com a fun¸˜o sqrt() que serve para calcular ra´
                               ca                                   ızes quadradas,

                     > v <- c(4, 7, 23.5, 76.2, 80)
                     > x <- sqrt(v)
                     > x

                     [1] 2.000000 2.645751 4.847680 8.729261 8.944272

                         Ao atribuir a x o resultado da aplica¸˜o da fun¸˜o ao vector v, estamos de facto a
                                                               ca        ca
                     criar um vector com as ra´ ızes quadradas dos n´meros contidos em v.
                                                                    u
                         Esta caracter´
                                      ıstica do R pode ser usada para levar a cabo opera¸˜es aritm´ticas en-
                                                                                        co        e
                     volvendo vectores,

                     > v1 <- c(4, 6, 87)
                     > v2 <- c(34, 32.4, 12)
                     > v1 + v2
2.4   Factores                                                                                   15


                    [1] 38.0 38.4 99.0

                        O que acontece se tentamos realizar opera¸˜es envolvendo vectores de tamanho dife-
                                                                 co
gra da reciclagem   rente? O R vai usar um regra de reciclagem dos valores do vector mais curto at´ este
                                                                                                   e
                    atingir o tamanho do maior. Por exemplo,

                    > v1 <- c(4, 6, 8, 24)
                    > v2 <- c(10, 2)
                    > v1 + v2

                    [1] 14    8 18 26

                       ´
                       E como se o vector c(10,2) fosse de facto c(10,2,10,2). Se os tamanhos n˜o s˜o
                                                                                               a a
                    m´ltiplos um do outro, o R imprime um aviso no ´cran,
                     u                                             e

                    > v1 <- c(4, 6, 8, 24)
                    > v2 <- c(10, 2, 4)
                    > v1 + v2

                    [1] 14    8 12 34

                       Repare-se que um aviso n˜o ´ um erro, o que quer dizer que a opera¸˜o foi levada a
                                               a e                                        ca
                    cabo.
                       Como foi mencionado anteriormente, um n´mero ´ de facto armazenado em R como
                                                                 u      e
                    um vector de tamanho 1. Isto d´ bastante jeito para opera¸˜es como a seguinte,
                                                  a                          co

                    > v1 <- c(4, 6, 8, 24)
                    > 2 * v1

                    [1]   8 12 16 48

                       Repare que o n´mero 2 (de facto o vector c(2)!) foi reciclado at´ atingir o tamanho
                                      u                                                e
                    do vector v1, tendo como resultado a multiplica¸˜o dos elementos todos deste vector
                                                                   ca
                    por 2. Como veremos mais tarde esta regra de reciclagem tamb´m se aplica a outros
                                                                                     e
                    objectos, como por exemplo matrizes.

                    2.4    Factores
                    Os factores proporcionam uma forma f´cil e compacta de lidar com dados categ´ricos
                                                               a                                     o
                    (ou nominais). Este tipo de dados podem ser vistos como vari´veis que podem tomar
                                                                                    a                                      Vari´veis nominais
                                                                                                                               a
                    como valores poss´  ıveis um conjunto finito de etiquetas (por exemplo uma vari´vel que
                                                                                                  a                        (factores)
                    armazene o estado civil de uma pessoa). Os factores tˆm associados a eles um conjunto
                                                                           e
                    de n´ıveis que s˜o os valores poss´
                                    a                 ıveis que podem tomar. Como veremos mais tarde v´rias
                                                                                                      a
                    fun¸˜es do R (por exemplo fun¸˜es ligadas ` visualiza¸˜o de dados) tiram partido do
                       co                             co           a         ca
                    facto de guardarmos informa¸˜o categ´rica como factores em vez de usarmos strings.
                                                   ca        o
                        Vejamos como criar factores em R. Suponhamos que pretendemos guardar o sexo de                     Criar factores
                    10 indiv´ıduos num vector,

                    > s <- c("f", "m", "m", "m", "f", "m", "f", "m", "f", "f")
                    > s

                     [1] "f" "m" "m" "m" "f" "m" "f" "m" "f" "f"

                       Ao transformarmos um vector de caracteres num factor, o R vai dar-nos a possibilidade
                    de fazer coisas como por exemplo contar quantas vezes ocorre cada valor desse factor.
                    Podemos transformar um vector de caracteres num factor da seguinte forma,
                       5 Como o R ´ sens´
                                  e     ıvel `s letras mai´sculas / min´sculas, True, por exemplo, n˜o ´ um valor l´gico
                                             a            u            u                            a e            o
                    v´lido.
                     a
16                                           2    FUNDAMENTOS DA LINGUAGEM R


                      > s <- factor(s)
                      > s

                       [1] f m m m f m f m f f
                      Levels: f m

                          Repare que s deixou de ser um vector de caracteres6 . Neste pequeno exemplo, o nosso
                      factor tem dois n´ıveis, ’f’ e ’m’.
                          Suponha agora que temos 4 novos indiv´  ıduos cujo sexo tamb´m pretendemos armaze-
                                                                                        e
                      nar. Imagine que por coincidˆncia todos pertencem ao sexo masculino. Se pretendemos
                                                       e
                      que o factor resultante mantenha os 2 n´
                                                             ıveis poss´
                                                                       ıveis para o sexo de um indiv´
                                                                                                    ıduo teremos
                      que fazer,

                      > outro.s <- factor(c("m", "m", "m", "m"), levels = c("f", "m"))
                      > outro.s

                      [1] m m m m
                      Levels: f m

                          Sem o parˆmetro extra, indicando os n´
                                   a                           ıveis a usar, a fun¸˜o factor() iria dar origem
                                                                                   ca
                      a um factor com um unico n´ (’m’), uma vez que este ´ o unico valor que ocorre no
                                            ´      ıvel                           e ´
                      vector de caracteres que estamos a transformar num factor.
                          Conforme mencionado anteriormente, uma das vantagens de transformar um vector
                      de caracteres num factor, ´ a possibilidade de usar fun¸˜es espec´
                                                 e                              co       ıficas para lidar com
Contar ocorrˆncias
            e         factores. Uma dessas fun¸˜es permite-nos contar o n´mero de ocorrˆncias de cada valor
                                               co                          u              e
                      (n´
                        ıvel),

                      > table(s)

                      s
                      f m
                      5 5

                      > table(outro.s)

                      outro.s
                      f m
                      0 4

Tabula¸˜es cruzadas
      co                  A fun¸˜o table() tamb´m pode ser usada para fazer tabula¸˜es cruzadas de dois
                                ca                 e                                  co
                      factores, desde que estes tenham o mesmo tamanho. Imaginemos que temos um outro
                      vector com a gama de idades dos indiv´
                                                           ıduos cujo sexo est´ armazenado em s. Podemos
                                                                              a
                      fazer uma tabula¸˜o cruzada da idade e do sexo dos 10 indiv´
                                       ca                                        ıduos, da seguinte forma,

                      > idade <- factor(c("adulto", "adulto", "jovem", "jovem", "adulto",
                      +     "adulto", "adulto", "jovem", "adulto", "jovem"))
                      > s

                       [1] f m m m f m f m f f
                      Levels: f m

                      > idade

                       [1] adulto adulto jovem             jovem       adulto adulto adulto jovem              adulto jovem
                      Levels: adulto jovem

                      > table(idade, s)
                         6 De facto, s ´ um tipo especial de vector de n´ meros, uma vez que internamente, o R guarda os factores
                                       e                                u
                      como vectores de n´meros, com tantos valores quantos os n´
                                           u                                          ıveis do factor. Isto pode ser confirmado
                      fazendo mode(s).
2.4   Factores                                                                              17


        s
idade    f m
  adulto 4 2
  jovem 1 3
    Isto quer dizer que existem 4 indiv´
                                       ıduos que s˜o adultos do sexo feminino, 2 que s˜o
                                                  a                                   a
homens adultos, etc.
    Repare como introduzimos a primeira instru¸˜o. Como era muito grande, mudamos
                                                 ca
de linha. Uma vez que o R descobre que a instru¸˜o ainda n˜o est´ terminada, apresenta
                                                ca          a     a                              Comandos
a linha seguinte com o prompt de continua¸˜o, que ´ um sinal mais (+).
                                           ca       e                                            espalhados por
    Tamb´m ´ poss´ obter facilmente frequˆncias marginais e relativas. Por exemplo,
          e e       ıvel                      e                                                  v´rias linhas
                                                                                                  a
para saber o n´mero total de adultos e jovens far´
               u                                  ıamos,                                         Frequˆncias
                                                                                                       e
                                                                                                 marginais e relativas
> tabela.cruzada <- table(idade, s)
> margin.table(tabela.cruzada, 1)
idade
adulto    jovem
     6        4
   Para obter a mesma informa¸˜o relativamente ao sexo dos indiv´
                              ca                                ıduos, bastaria mudar
o n´mero 1, que indica que pretendemos os totais por linha (a primeira dimens˜o do
   u                                                                            a
objecto) da tabela cruzada, para um 2, para obtermos os totais por coluna da tabela
cruzada,
> margin.table(tabela.cruzada, 2)
s
f m
5 5
   Relativamente a frequˆncias relativas, podemos usar a fun¸˜o prop.table(), de cujo
                        e                                   ca
uso apresentamos alguns exemplos,
> prop.table(tabela.cruzada, 1)
        s
idade            f         m
  adulto 0.6666667 0.3333333
  jovem 0.2500000 0.7500000
> prop.table(tabela.cruzada, 2)
        s
idade      f   m
  adulto 0.8 0.4
  jovem 0.2 0.6
> prop.table(tabela.cruzada)
        s
idade      f   m
  adulto 0.4 0.2
  jovem 0.1 0.3
   No primeiro exemplo, as propor¸˜es s˜o calculadas em rela¸˜o ao total por linha.
                                     co   a                     ca
Assim, o n´mero 0.6666667 ´ o resultado de dividir 4 (o n´mero de adultos femininos),
            u                e                            u
por 6 (o n´mero total de adultos). No segundo exemplo, as propor¸˜es s˜o relativamente
           u                                                     co   a
aos totais por coluna, enquanto que no terceiro exemplo s˜o relativas ao n´mero total
                                                          a                u
de indiv´ıduos (isto ´, ficamos a saber que o n´mero de adultos masculinos representa
                     e                         u
20% do total dos indiv´ ıduos). Caso pretendˆssemos, obter os n´mero em percentagem,
                                            e                  u
poder´ıamos simplesmente multiplicar as chamadas `s fun¸˜es pelo n´mero 1007 ,
                                                  a     co          u
  7 Refira-se   a t´
                  ıtulo de curiosidade que isto ´ mais um exemplo da regra de reciclagem.
                                                e
18                                   2   FUNDAMENTOS DA LINGUAGEM R


                      > 100 * prop.table(tabela.cruzada)

                              s
                      idade     f m
                        adulto 40 20
                        jovem 10 30

                      2.5     Sequˆncias
                                  e
Gerar sequˆncias de
          e           Podem-se gerar sequˆncias em R de v´rias formas. Por exemplo, imaginemos que pre-
                                         e               a
inteiros              tendemos criar um vector com os n´mero de 1 a 1000. Em vez de os escrevermos todos,
                                                       u
                      podemos usar,

                      > x <- 1:1000

                      o que cria um vector com os n´mero inteiros de 1 a 1000.
                                                    u
                         Devemos ter algum cuidado com a precedˆncia do operador “:”, que ´ usado para
                                                                    e                         e
                      gerar sequˆncias, em rela¸˜o aos operadores aritm´ticos. O exemplo seguinte ilustra os
                                 e             ca                      e
                      perigos que corremos,

                      > 10:15 - 1

                      [1]    9 10 11 12 13 14

                      > 10:(15 - 1)

                      [1] 10 11 12 13 14

                         Repare o que aconteceu no primeiro exemplo. Devido ao operador “:” ter maior
                      precedˆncia do que o “-”, o R gerou um vector com os n´meros de 10 a 15 e depois
                            e                                                     u
                      subtraiu a esse vector o n´mero 1. Devido ` regra da reciclagem isto correspondeu a
                                                 u                  a
                      subtrair 1 a todos os elementos do vector, levando ao resultado que vemos acima. J´ no
                                                                                                        a
                      segundo exemplo, usamos os parˆntesis para indicar ao R que o que pretendemos ´ um
                                                       e                                               e
                      vector contendo os n´meros desde 10 at´ ao resultado da opera¸˜o 15-1, i.e. 14.
                                           u                  e                      ca
Sequˆncias
    e                    O operador “:” tamb´m pode ser usado para gerar sequˆncias descendentes,
                                               e                                 e
descendentes
                      > 5:0

                      [1] 5 4 3 2 1 0

Sequˆncias de reais
    e                      Para gerar sequˆncias com n´meros reais podemos usar a fun¸˜o seq(),
                                          e           u                              ca

                      > seq(-4, 1, 0.5)

                       [1] -4.0 -3.5 -3.0 -2.5 -2.0 -1.5 -1.0 -0.5         0.0   0.5   1.0

                          No exemplo acima geramos uma sequˆncia formada pelos n´meros a come¸ar em
                                                               e                    u             c
                      -4 at´ 1 de 0.5 em 0.5. Esta fun¸˜o tem v´rias outras possibilidades para explicitar
                           e                            ca        a
                      a sequˆncia que pretendemos. Alguns exemplos s˜o dados a baixo. Poder´ tamb´m
                             e                                          a                      a       e
                      explorar as potencialidades de ajuda do R, digitando o comando ? seq que mostra o
                      help relativamente ` fun¸˜o seq.
                                         a    ca

                      > seq(from = 1, to = 5, length = 4)

                      [1] 1.000000 2.333333 3.666667 5.000000

                      > seq(from = 1, to = 5, length = 2)

                      [1] 1 5

                      > seq(length = 10, from = -2, by = 0.2)
2.5    Sequˆncias
                      e                                                                       19


            [1] -2.0 -1.8 -1.6 -1.4 -1.2 -1.0 -0.8 -0.6 -0.4 -0.2

               Repare que existe uma diferen¸a subtil na forma como usamos as fun¸˜o seq() nos
                                             c                                     ca
           exemplos acima. De facto, em vez de indicarmos os valores dos argumentos da fun-
omes dos   ca
           ¸˜o (como por exemplo em seq(-4,1,0.5), indicamos o nome dos argumentos seguido
gumentos   de um sinal igual e o valor com o qual pretendemos chamar a fun¸˜o. As duas for-
                                                                               ca
           mas s˜o equivalentes, no entanto a chamada por nome tem vantagens de legibilidade
                 a
           e tamb´m quando a fun¸˜o tem muitos argumentos permite-nos desrespeitar a sua or-
                   e               ca
           dem, ou seja, relativamente aos exemplos anteriores obter´
                                                                    ıamos o mesmo resultado com
           seq(length=4,from=1,to=5). Iremos analisar com mais detalhe esta quest˜o quando
                                                                                      a
           estudarmos o uso e cria¸˜o de fun¸˜es em R na Sec¸˜o 3.3.1.
                                  ca         co              ca
               Uma outra fun¸˜o bastante util para gerar sequˆncias ´ a fun¸˜o rep(),
                              ca          ´                  e      e      ca                       Sequˆncias repetidas
                                                                                                        e


           > rep(5, 10)

            [1] 5 5 5 5 5 5 5 5 5 5

           > rep("sim", 3)

           [1] "sim" "sim" "sim"

           > rep(1:3, 2)

           [1] 1 2 3 1 2 3

              A fun¸˜o gl() pode ser usada para gerar sequˆncias envolvendo factores. A sintaxe
                    ca                                      e                                       Sequˆncias com
                                                                                                        e
           desta fun¸˜o ´ gl(k,n), em que k ´ o n´mero de n´
                     ca e                      e     u        ıveis do factor e n o n´mero de
                                                                                      u             factores
           repeti¸˜es de cada n´
                 co            ıvel. Vejamos dois exemplos,

           > gl(3, 5)

            [1] 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3
           Levels: 1 2 3

           > gl(2, 5, labels = c("nao", "sim"))

            [1] nao nao nao nao nao sim sim sim sim sim
           Levels: nao sim

              Finalmente, o R tem uma s´rie de fun¸˜es para gerar sequˆncias aleat´rias de acordo Sequˆncias
                                         e          co                    e          o                   e
           com uma s´rie de fun¸˜es de distribui¸˜o de probabilidade. Essas fun¸˜es tˆm a forma ge- aleat´rias
                      e         co              ca                              co e                     o
           n´rica rfunc(n, par1, par2, ...), em que n ´ o n´mero de dados a gerar, e par1, par2, ...
            e                                             e u
           s˜o valores de alguns parˆmetros que a fun¸˜o espec´
            a                       a                 ca        ıfica a ser usada possa precisar. Por
           exemplo, se pretendemos 10 n´meros gerados aleatoriamente de acordo com uma distri-
                                         u
           bui¸˜o normal de m´dia 0 e desvio padr˜o unit´rio, podemos fazer,
              ca               e                   a       a

           > rnorm(10)

            [1]   0.6068968    1.2468432 1.8680112      1.3694861 -2.7365075 -0.8887380
            [7]   0.2129164    0.8129556 -0.1786157     0.7735804

              Se preferirmos 10 n´meros provenientes de uma distribui¸˜o normal com m´dia 10 e
                                  u                                  ca              e
           desvio padr˜o 3, far´
                      a        ıamos

           > rnorm(10, mean = 10, sd = 3)

            [1] 11.224101 12.993983      9.577280    8.083312    7.553354 13.085718     8.347373
            [8] 8.388759 11.020737       4.095438

               De igual modo para obter 5 n´meros obtidos de forma aleat´ria de uma distribui¸˜o
                                           u                            o                    ca
           t de Student com 10 graus de liberdade, fazemos
20                                    2   FUNDAMENTOS DA LINGUAGEM R


                      > rt(5, df = 10)

                      [1]   1.1357666 -2.7568824      0.7445925 -0.3963767       1.2472630

                          O R tem muitas mais fun¸˜es para outras distribui¸˜es de probabilidade, bem como
                                                    co                     co
                      fun¸˜es semelhantes para obter a densidade de probabilidade, as densidades acumuladas
                          co
                      e os quartis das distribui¸˜es. No entanto, a explora¸˜o exaustiva destas fun¸˜es sai
                                                 co                         ca                      co
                      fora do ˆmbito desta cadeira, podendo o aluno por exemplo obter mais informa¸˜o no
                              a                                                                      ca
                      livro Dalgaard (2002), ou ent˜o consultando a ajuda das fun¸˜es que cont´m exemplos e
                                                    a                            co           e
                      referˆncias a fun¸˜es relacionadas.
                           e           co

                      2.6    Indexa¸˜o
                                   ca
                      Na Sec¸˜o 2.2 j´ vimos exemplos de como extrair um elemento de um vector indicando a
                             ca       a
                      sua posi¸˜o entre parˆntesis rectos. O R tamb´m nos permite usar vectores dentro desses
                              ca           e                        e
Vectores de ´
            ındices   parˆntesis rectos. Estes vectores chamam-se vectores de ´
                         e                                                     ındices. Existem v´rios tipos de
                                                                                                 a
Vector de ´
          ındices     vectores de ´
                                  ındices. Os vectores de ´
                                                          ındices booleanos extraem de um vector os elementos
l´gicos
 o                    correspondentes a posi¸˜es verdadeiras. Vejamos um exemplo concreto,
                                             co

                      > x <- c(0, -3, 4, -1, 45, 90, -5)
                      > x

                      [1]   0 -3   4 -1 45 90 -5

                      > x > 0

                      [1] FALSE FALSE     TRUE FALSE     TRUE   TRUE FALSE

                      > y <- x > 0

                          A terceira instru¸˜o do c´digo mostrado acima ´ uma condi¸˜o l´gica envolvendo
                                            ca      o                       e          ca o
                      o vector x. Esta condi¸˜o ´ uma compara¸˜o com o valor zero. Devido ` regra de
                                               ca e                ca                             a
                      reciclagem, o resultado desta compara¸˜o ´ um vector de valores l´gicos resultantes de
                                                            ca e                        o
                      fazer a compara¸˜o para cada elemento do vector x. Na instru¸˜o seguinte guardamos
                                       ca                                            ca
                      este vector l´gico no objecto y. Usando este vector como um vector de ´
                                   o                                                        ındices, podemos
                      obter os elementos de x que s˜o maiores do que zero, da seguinte forma,
                                                     a

                      > x[y]

                      [1]   4 45 90

                          Como os elementos de y que s˜o verdadeiros (true) s˜o o 3º, 5º e o 6º, isto corres-
                                                       a                       a
                      ponde a extrair esses elementos de x, que ´ o resultado que obtemos com a instru¸˜o
                                                                e                                        ca
                      mostrada acima. Poder´  ıamos obter um resultado igual, evitando criar um novo vector,
                      fazendo

                      > x[x > 0]

                      [1]   4 45 90

                         Tirando partido da gama de operadores l´gicos dispon´
                                                                 o           ıveis no R, podemos construir
                      vectores de indexa¸˜o l´gicos mais complexos,
                                        ca o

                      > x[x <= -2 | x > 5]

                      [1] -3 45 90 -5

                      > x[x > 40 & x < 100]

                      [1] 45 90
2.6   Indexa¸˜o
                                ca                                                                       21


peradores l´gicos
           o            O operador “|” corresponde ao OU (disjun¸˜o) l´gico, enquanto o operador “&” ´ o
                                                                    ca    o                              e
                    E (conjun¸˜o) l´gica. Isto quer dizer que a primeira instru¸˜o d´ como resultado os
                               ca    o                                            ca    a
                    elementos de x que s˜o menores ou iguais a -2, ou maiores do que 5. O segundo exemplo,
                                           a
                    por sua vez, mostra-nos os elementos de x que s˜o maiores do que 40 e menores do que
                                                                      a
                    100. Note que existem duas variantes destes dois operadores l´gicos com um modo de
                                                                                    o
                    funcionamento ligeiramente diferente. Eles s˜o os operadores “||” e “&&”. Ambos fazem
                                                                  a
                    as mesmas opera¸˜es que os anteriores, o OU e o E l´gicos. A diferen¸a reside no facto
                                       co                                  o               c
                    de os operadores anteriores fazerem essas opera¸˜es de forma vectorial, ou seja elemento
                                                                     co
                    a elemento quando os operandos contˆm mais do que um elemento, o que permite por
                                                           e
                    exemplo aplicar as opera¸˜es sobre conjuntos de n´meros, como nos exemplos mostrados
                                              co                        u
                    em cima. Ou seja estes operadores produzem um conjunto de resultados (valores T ou
                    F). J´ as variantes com dois s´
                         a                        ımbolos, s´ fazem a opera¸˜o sobre o primeiro elemento, ou
                                                            o                ca
                    seja procedem da esquerda para a direita, produzindo um unico resultado. Estas ultimas
                                                                                ´                     ´
                    variantes s˜o essencialmente usadas em instru¸˜es de controlo da execu¸˜o de programas,
                                a                                  co                     ca
                    como iremos ver na Sec¸˜o 3.2.1.
                                             ca
                        O R tamb´m nos permite usar um vector de n´meros inteiros como ´
                                   e                                      u                    ındice de um    Vector de ´
                                                                                                                         ındices
                    outro vector. Os n´meros desse vector de ´
                                         u                      ındices correspondem aos elementos a extrair   num´ricos
                                                                                                                  e
                    do outro vector,

                    > (v <- c("a", "b", "c", "d", "e", "f", "g", "h", "i", "j"))

                     [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j"

                    > v[c(4, 6)]

                    [1] "d" "f"

                    > v[1:3]

                    [1] "a" "b" "c"

                       Podemos ainda usar um vector com n´meros negativos, o que nos permite indicar
                                                             u                                                 ´
                                                                                                               Indices negativos
                    quais os elementos a n˜o obter como resultado da indexa¸˜o,
                                          a                                ca

                    > v[-1]

                    [1] "b" "c" "d" "e" "f" "g" "h" "i" "j"

                    > v[-c(4, 6)]

                    [1] "a" "b" "c" "e" "g" "h" "i" "j"

                    > v[-(1:3)]

                    [1] "d" "e" "f" "g" "h" "i" "j"

                        Note bem a importˆncia dos parˆntesis no ultimo exemplo, devido ` precedˆncia do
                                           a            e         ´                       a       e
                    operador “:” j´ mencionada na Sec¸˜o 2.5.
                                  a                   ca
                        Um vector tamb´m pode ser indexado por um vector de strings tirando partido do
                                        e                                                                      ´
                                                                                                               Indices com nomes
                    facto de o R permitir dar nomes aos elementos de um vector atrav´s na fun¸˜o names().
                                                                                     e        ca
                    Vectores com os elementos com nomes s˜o por vezes prefer´
                                                            a                 ıveis pois as suas “posi¸˜es”
                                                                                                      co
                    s˜o mais facilmente memoriz´veis. Suponhamos que t´
                     a                           a                       ınhamos um vector com as taxas
                    de infla¸˜o de 5 pa´
                            ca         ıses europeus. Poder´ıamos criar um vector com nomes da seguinte        Dar nomes a
                    forma,                                                                                     elementos de
                                                                                                               vectores
                    > tx.infl <- c(2.5, 2, 2.1, 2.3, 1.9)
                    > names(tx.infl) <- c("Portugal", "Fran¸a", "Espanha", "It´lia",
                                                           c                  a
                    +     "Alemanha")
                    > tx.infl
22                                    2   FUNDAMENTOS DA LINGUAGEM R


                     Portugal      Fran¸a
                                       c    Espanha     It´lia Alemanha
                                                          a
                          2.5         2.0       2.1        2.3      1.9

                          Os elementos do vector tx.infl podem agora ser acedidos usando os seus nomes,

                     > tx.infl["Portugal"]

                     Portugal
                          2.5

                     > tx.infl[c("Espanha", "Alemanha")]

                      Espanha Alemanha
                          2.1      1.9

´
Indices vazios           Finalmente, os ´
                                        ındices podem ser vazios, o que tem o significado que todos os elemen-
                     tos s˜o seleccionados. Por exemplo, se pretendemos preencher todas as posi¸˜es de um
                          a                                                                       co
                     vector com zeros podemos fazer x[] <- 0. De notar, que isto ´ diferente de fazer x <-
                                                                                     e
                     0, que teria como efeito atribuir ao vector x um vector com um unico elemento (zero),
                                                                                        ´
                     enquanto que a primeira alternativa, assumindo que o vector x j´ existia, iria substituir
                                                                                       a
                     todos os seus elementos por zero. Tente ambas as alternativas.

                     2.7     Matrizes
                     Por vezes poderemos estar interessados em armazenar a nossa informa¸˜o em estruturas
                                                                                           ca
O que ´ uma matriz
      e              de dados com mais do que uma dimens˜o, como ´ o caso dos vectores. As matrizes arran-
                                                           a        e
                     jam a informa¸˜o em duas dimens˜es. Em R, as matrizes n˜o s˜o mais do que vectores
                                    ca                  o                        a a
                     com uma propriedade especial que ´ a dimens˜o. Vejamos um exemplo. Suponhamos que
                                                        e        a
                     temos doze n´meros correspondentes `s vendas trimestrais durante o ultimo ano, em trˆs
                                  u                       a                              ´               e
Criar uma matriz     lojas. As instru¸˜es seguintes permitem “organizar” esses n´meros como uma matriz,
                                     co                                         u

                     > vendas <- c(45, 23, 66, 77, 33, 44, 56, 12, 78, 23, 78, 90)
                     > vendas

                      [1] 45 23 66 77 33 44 56 12 78 23 78 90

                     > dim(vendas) <- c(3, 4)
                     > vendas

                            [,1] [,2] [,3] [,4]
                     [1,]     45   77   56   23
                     [2,]     23   33   12   78
                     [3,]     66   44   78   90

                         Repare como os n´meros foram “espalhados” por uma matriz com 3 linhas e 4 colunas,
                                          u
                     que foi a dimens˜o que atribu´
                                      a              ımos ao vector vendas atrav´s da fun¸˜o dim(). Na
                                                                                  e        ca
                     realidade seria mais simples criar a matriz usando uma fun¸˜o espec´
                                                                               ca       ıfica para isso,

                     > vendas <- matrix(c(45, 23, 66, 77, 33, 44, 56, 12, 78, 23, 78,
                     +     90), 3, 4)

                         Como eventualmente ter´ reparado os n´meros foram “espalhados” pela matriz por
                                                  a              u
                     coluna, i.e. primeiro foi preenchida a primeira coluna, depois a segunda, etc. Caso n˜o
                                                                                                          a
                     seja isto o que pretendemos, poderemos preencher a matriz por linhas da seguinte forma,

                     > vendas <- matrix(c(45, 23, 66, 77, 33, 44, 56, 12, 78, 23, 78,
                     +     90), 3, 4, byrow = T)
                     > vendas
2.7     Matrizes                                                                     23


        [,1] [,2] [,3] [,4]
[1,]      45   23   66   77
[2,]      33   44   56   12
[3,]      78   23   78   90

   Nas matrizes tamb´m ´ poss´ dar nomes aos elementos para tornar a leitura da in-
                      e e      ıvel
forma¸˜o mais leg´
      ca         ıvel. Vejamos como fazer isso para a nossa matriz de vendas trimestrais
nas 3 lojas,                                                                               Dar nomes `s linhas
                                                                                                     a
                                                                                           e colunas
> rownames(vendas) <- c("loja1", "loja2", "loja3")
> colnames(vendas) <- c("1.trim", "2.trim", "3.trim", "4.trim")
> vendas

         1.trim 2.trim 3.trim 4.trim
loja1        45     23     66     77
loja2        33     44     56     12
loja3        78     23     78     90

   Como a visualiza¸˜o das matrizes sugere, podemos aceder aos elementos individuais
                     ca                                                                    Aceder aos
das matrizes usando um esquema de indexa¸˜o semelhante ao dos vectores, mas desta
                                            ca                                             elementos da matriz
vez com dois ´
             ındices (as dimens˜es da matriz),
                               o

> vendas[2, 2]

[1] 44

      Ou ent˜o, tirando partido dos nomes,
            a

> vendas["loja2", "2.trim"]

[1] 44

   De igual modo, podemos tirar partido dos esquemas de indexa¸˜o discutidos na Sec-
                                                                ca
¸˜o 2.6 para seleccionar elementos das matrizes, como mostram os seguintes exemplos,
ca

> vendas[-2, 2]

loja1 loja3
   23    23

> vendas[1, -c(2, 4)]

1.trim 3.trim
    45     66

    Podemos mesmo omitir uma das dimens˜es das matrizes para deste modo obter todos
                                         o
os elementos da mesma (um ´
                          ındice vazio),

> vendas[1, ]

1.trim 2.trim 3.trim 4.trim
    45     23     66     77

> vendas[, "4.trim"]

loja1 loja2 loja3
   77    12    90

    As fun¸˜es cbind() e rbind() podem ser usadas para juntar dois ou mais vectores
           co
ou matrizes, por colunas ou por linhas, respectivamente. Os seguintes exemplos ilustram
o seu uso,
24                                  2   FUNDAMENTOS DA LINGUAGEM R


                 > m1 <- matrix(c(45, 23, 66, 77, 33, 44, 56, 12, 78, 23), 2, 5)
                 > m1

                        [,1] [,2] [,3] [,4] [,5]
                 [1,]     45   66   33   56   78
                 [2,]     23   77   44   12   23

                 > cbind(c(4, 76), m1[, 4])

                        [,1] [,2]
                 [1,]      4   56
                 [2,]     76   12

                 > m2 <- matrix(rep(10, 50), 10, 5)
                 > m2

                         [,1] [,2] [,3] [,4] [,5]
                  [1,]     10   10   10   10   10
                  [2,]     10   10   10   10   10
                  [3,]     10   10   10   10   10
                  [4,]     10   10   10   10   10
                  [5,]     10   10   10   10   10
                  [6,]     10   10   10   10   10
                  [7,]     10   10   10   10   10
                  [8,]     10   10   10   10   10
                  [9,]     10   10   10   10   10
                 [10,]     10   10   10   10   10

                 > m3 <- rbind(m1[1, ], m2[5, ])
                 > m3

                        [,1] [,2] [,3] [,4] [,5]
                 [1,]     45   66   33   56   78
                 [2,]     10   10   10   10   10

                    As regras aritm´ticas e de reciclagem que estudamos anteriormente, tamb´m se apli-
                                   e                                                       e
Reciclagem com   cam `s matrizes. Vejamos uns pequenos exemplos,
                     a
matrizes
                 > m <- matrix(c(45, 23, 66, 77, 33, 44, 56, 12, 78, 23), 2, 5)
                 > m

                        [,1] [,2] [,3] [,4] [,5]
                 [1,]     45   66   33   56   78
                 [2,]     23   77   44   12   23

                 > m * 3

                        [,1] [,2] [,3] [,4] [,5]
                 [1,]    135 198    99 168 234
                 [2,]     69 231 132     36   69

                 > m1 <- matrix(c(45, 23, 66, 77, 33, 44), 2, 3)
                 > m1

                        [,1] [,2] [,3]
                 [1,]     45   66   33
                 [2,]     23   77   44

                 > m2 <- matrix(c(12, 65, 32, 7, 4, 78), 2, 3)
                 > m2
2.7     Matrizes                                                                      25


        [,1] [,2] [,3]
[1,]      12   32    4
[2,]      65    7   78

> m1 + m2

        [,1] [,2] [,3]
[1,]      57   98   37
[2,]      88   84 122

   A aplica¸˜o das opera¸˜es a matrizes (como no exemplo “> m*3” apresentado acima),
            ca            co
funciona elemento a elemento como no caso dos vectores. Isto significa que se um ope-
rando ´ menor ele ´ reciclado at´ perfazer o tamanho do maior. No entanto, o R tamb´m
      e           e             e                                                  e
possui operadores especiais para as usuais opera¸˜es da ´lgebra matricial. Por exemplo
                                                 co      a
a multiplica¸˜o de duas matrizes pode ser feita da seguinte forma,
            ca                                                                              Multiplica¸˜o
                                                                                                      ca
                                                                                            matricial
> m1 <- matrix(c(45, 23, 66, 77, 33, 44), 2, 3)
> m1

        [,1] [,2] [,3]
[1,]      45   66   33
[2,]      23   77   44

> m2 <- matrix(c(5, 3, 466, 54.5, 3.2, -34), 3, 2)
> m2

        [,1] [,2]
[1,]       5 54.5
[2,]       3   3.2
[3,]     466 -34.0

> m1 %*% m2

      [,1]   [,2]
[1,] 15801 1541.7
[2,] 20850    3.9

    Atente no operador especial (%*%) para simbolizar que se trata da multiplica¸˜o ma-
                                                                                 ca
tricial e n˜o a usual multiplica¸˜o. A multiplica¸˜o matricial tem, como ´ sabido, regras
           a                    ca               ca                      e
especiais no que concerne, por exemplo, ` dimens˜o das matrizes envolvidas, pelo que
                                          a         a
n˜o poder´ ser usada com quaisquer matrizes.
 a         a
    Ainda no contexto da ´lgebra matricial, o R tem muitas outras fun¸˜es, como por
                            a                                            co
exemplo a fun¸˜o t() para obter a transposta de uma matriz quadrada,
                ca                                                                          Transposta de uma
                                                                                            matriz
> t(m1)

        [,1] [,2]
[1,]      45   23
[2,]      66   77
[3,]      33   44

ou a fun¸˜o det() para calcular o determinante de uma matriz,
        ca                                                                                  Determinante de
                                                                                            uma matriz
> m <- matrix(c(34, -23, 43, 5), 2, 2)
> det(m)

[1] 1159
      ´
      E tamb´m poss´ usar a fun¸˜o solve() para obter a inversa de uma matriz,
            e      ıvel        ca                                                           Inversa de uma
                                                                                            matriz
Introdução à Programação em R na Universidade do Porto
Introdução à Programação em R na Universidade do Porto
Introdução à Programação em R na Universidade do Porto
Introdução à Programação em R na Universidade do Porto
Introdução à Programação em R na Universidade do Porto
Introdução à Programação em R na Universidade do Porto
Introdução à Programação em R na Universidade do Porto
Introdução à Programação em R na Universidade do Porto
Introdução à Programação em R na Universidade do Porto
Introdução à Programação em R na Universidade do Porto
Introdução à Programação em R na Universidade do Porto
Introdução à Programação em R na Universidade do Porto
Introdução à Programação em R na Universidade do Porto
Introdução à Programação em R na Universidade do Porto
Introdução à Programação em R na Universidade do Porto
Introdução à Programação em R na Universidade do Porto
Introdução à Programação em R na Universidade do Porto
Introdução à Programação em R na Universidade do Porto
Introdução à Programação em R na Universidade do Porto
Introdução à Programação em R na Universidade do Porto
Introdução à Programação em R na Universidade do Porto
Introdução à Programação em R na Universidade do Porto
Introdução à Programação em R na Universidade do Porto
Introdução à Programação em R na Universidade do Porto
Introdução à Programação em R na Universidade do Porto
Introdução à Programação em R na Universidade do Porto
Introdução à Programação em R na Universidade do Porto
Introdução à Programação em R na Universidade do Porto
Introdução à Programação em R na Universidade do Porto
Introdução à Programação em R na Universidade do Porto
Introdução à Programação em R na Universidade do Porto
Introdução à Programação em R na Universidade do Porto
Introdução à Programação em R na Universidade do Porto
Introdução à Programação em R na Universidade do Porto
Introdução à Programação em R na Universidade do Porto
Introdução à Programação em R na Universidade do Porto
Introdução à Programação em R na Universidade do Porto
Introdução à Programação em R na Universidade do Porto
Introdução à Programação em R na Universidade do Porto
Introdução à Programação em R na Universidade do Porto
Introdução à Programação em R na Universidade do Porto
Introdução à Programação em R na Universidade do Porto
Introdução à Programação em R na Universidade do Porto
Introdução à Programação em R na Universidade do Porto
Introdução à Programação em R na Universidade do Porto
Introdução à Programação em R na Universidade do Porto
Introdução à Programação em R na Universidade do Porto
Introdução à Programação em R na Universidade do Porto
Introdução à Programação em R na Universidade do Porto
Introdução à Programação em R na Universidade do Porto
Introdução à Programação em R na Universidade do Porto
Introdução à Programação em R na Universidade do Porto
Introdução à Programação em R na Universidade do Porto
Introdução à Programação em R na Universidade do Porto
Introdução à Programação em R na Universidade do Porto
Introdução à Programação em R na Universidade do Porto
Introdução à Programação em R na Universidade do Porto
Introdução à Programação em R na Universidade do Porto
Introdução à Programação em R na Universidade do Porto
Introdução à Programação em R na Universidade do Porto
Introdução à Programação em R na Universidade do Porto
Introdução à Programação em R na Universidade do Porto
Introdução à Programação em R na Universidade do Porto
Introdução à Programação em R na Universidade do Porto
Introdução à Programação em R na Universidade do Porto
Introdução à Programação em R na Universidade do Porto
Introdução à Programação em R na Universidade do Porto
Introdução à Programação em R na Universidade do Porto
Introdução à Programação em R na Universidade do Porto
Introdução à Programação em R na Universidade do Porto
Introdução à Programação em R na Universidade do Porto
Introdução à Programação em R na Universidade do Porto
Introdução à Programação em R na Universidade do Porto
Introdução à Programação em R na Universidade do Porto

Mais conteúdo relacionado

Mais procurados

Programming Languages Paradigms
Programming Languages ParadigmsProgramming Languages Paradigms
Programming Languages Paradigmsrodrigovmoraes
 
Apostila c# iniciantes
Apostila c# iniciantesApostila c# iniciantes
Apostila c# iniciantesCaique Moretto
 
Apostila de Java: Orientação a Objetos
Apostila de Java: Orientação a ObjetosApostila de Java: Orientação a Objetos
Apostila de Java: Orientação a ObjetosK19 Treinamentos
 
K19 k12-desenvolvimento-web-com-jsf2-e-jpa2
K19 k12-desenvolvimento-web-com-jsf2-e-jpa2K19 k12-desenvolvimento-web-com-jsf2-e-jpa2
K19 k12-desenvolvimento-web-com-jsf2-e-jpa2Caique Moretto
 
Programacao Orientada A Objetos (Java)
Programacao Orientada A Objetos (Java)Programacao Orientada A Objetos (Java)
Programacao Orientada A Objetos (Java)Robson Silva Espig
 
K19 k22-desenvolvimento-web-avancado-com-jsf2-ejb3.1-e-cdi
K19 k22-desenvolvimento-web-avancado-com-jsf2-ejb3.1-e-cdiK19 k22-desenvolvimento-web-avancado-com-jsf2-ejb3.1-e-cdi
K19 k22-desenvolvimento-web-avancado-com-jsf2-ejb3.1-e-cdiCaique Moretto
 
K19 k23-integracao-de-sistemas-com-webservices-jms-e-ejb
K19 k23-integracao-de-sistemas-com-webservices-jms-e-ejbK19 k23-integracao-de-sistemas-com-webservices-jms-e-ejb
K19 k23-integracao-de-sistemas-com-webservices-jms-e-ejbCaique Moretto
 
K19 k11-orientacao-a-objetos-em-java
K19 k11-orientacao-a-objetos-em-javaK19 k11-orientacao-a-objetos-em-java
K19 k11-orientacao-a-objetos-em-javaCaique Moretto
 
K19 k12-desenvolvimento-web-com-jsf2-e-jpa2
K19 k12-desenvolvimento-web-com-jsf2-e-jpa2K19 k12-desenvolvimento-web-com-jsf2-e-jpa2
K19 k12-desenvolvimento-web-com-jsf2-e-jpa2surdido
 
K19 k51-design-patterns-em-java
K19 k51-design-patterns-em-javaK19 k51-design-patterns-em-java
K19 k51-design-patterns-em-javaCaique Moretto
 
K19 k31-csharp-e-orientacao-a-objetos
K19 k31-csharp-e-orientacao-a-objetosK19 k31-csharp-e-orientacao-a-objetos
K19 k31-csharp-e-orientacao-a-objetosCaique Moretto
 

Mais procurados (19)

Programming Languages Paradigms
Programming Languages ParadigmsProgramming Languages Paradigms
Programming Languages Paradigms
 
Apostila latex
Apostila latexApostila latex
Apostila latex
 
Perl
PerlPerl
Perl
 
Php
PhpPhp
Php
 
Apostila geo gebra
Apostila geo gebraApostila geo gebra
Apostila geo gebra
 
Apostila c# iniciantes
Apostila c# iniciantesApostila c# iniciantes
Apostila c# iniciantes
 
Apostila de Java: Orientação a Objetos
Apostila de Java: Orientação a ObjetosApostila de Java: Orientação a Objetos
Apostila de Java: Orientação a Objetos
 
K19 k12-desenvolvimento-web-com-jsf2-e-jpa2
K19 k12-desenvolvimento-web-com-jsf2-e-jpa2K19 k12-desenvolvimento-web-com-jsf2-e-jpa2
K19 k12-desenvolvimento-web-com-jsf2-e-jpa2
 
Programacao Orientada A Objetos (Java)
Programacao Orientada A Objetos (Java)Programacao Orientada A Objetos (Java)
Programacao Orientada A Objetos (Java)
 
Apostila JSF 2.0 - K19
Apostila JSF 2.0 - K19Apostila JSF 2.0 - K19
Apostila JSF 2.0 - K19
 
K19 k22-desenvolvimento-web-avancado-com-jsf2-ejb3.1-e-cdi
K19 k22-desenvolvimento-web-avancado-com-jsf2-ejb3.1-e-cdiK19 k22-desenvolvimento-web-avancado-com-jsf2-ejb3.1-e-cdi
K19 k22-desenvolvimento-web-avancado-com-jsf2-ejb3.1-e-cdi
 
K19 k23-integracao-de-sistemas-com-webservices-jms-e-ejb
K19 k23-integracao-de-sistemas-com-webservices-jms-e-ejbK19 k23-integracao-de-sistemas-com-webservices-jms-e-ejb
K19 k23-integracao-de-sistemas-com-webservices-jms-e-ejb
 
K19 k11-orientacao-a-objetos-em-java
K19 k11-orientacao-a-objetos-em-javaK19 k11-orientacao-a-objetos-em-java
K19 k11-orientacao-a-objetos-em-java
 
Aprenda computaocompython
Aprenda computaocompythonAprenda computaocompython
Aprenda computaocompython
 
Apostila UML
Apostila UML Apostila UML
Apostila UML
 
K19 k12-desenvolvimento-web-com-jsf2-e-jpa2
K19 k12-desenvolvimento-web-com-jsf2-e-jpa2K19 k12-desenvolvimento-web-com-jsf2-e-jpa2
K19 k12-desenvolvimento-web-com-jsf2-e-jpa2
 
Apostila tex
Apostila texApostila tex
Apostila tex
 
K19 k51-design-patterns-em-java
K19 k51-design-patterns-em-javaK19 k51-design-patterns-em-java
K19 k51-design-patterns-em-java
 
K19 k31-csharp-e-orientacao-a-objetos
K19 k31-csharp-e-orientacao-a-objetosK19 k31-csharp-e-orientacao-a-objetos
K19 k31-csharp-e-orientacao-a-objetos
 

Destaque (12)

Linguagem R
Linguagem RLinguagem R
Linguagem R
 
Linguagem R
Linguagem RLinguagem R
Linguagem R
 
Análise exploratória e modelação com R parte 1
Análise exploratória e modelação com R parte 1Análise exploratória e modelação com R parte 1
Análise exploratória e modelação com R parte 1
 
Introdução ao R
Introdução ao RIntrodução ao R
Introdução ao R
 
02 tópico 1 - regressão linear simples 01 - Econometria - Graduação - UFPA
02   tópico 1 - regressão linear simples 01 - Econometria - Graduação - UFPA02   tópico 1 - regressão linear simples 01 - Econometria - Graduação - UFPA
02 tópico 1 - regressão linear simples 01 - Econometria - Graduação - UFPA
 
Slides Estatística
Slides EstatísticaSlides Estatística
Slides Estatística
 
Aula 01 introdução a estatística
Aula 01   introdução a estatísticaAula 01   introdução a estatística
Aula 01 introdução a estatística
 
Estatística
EstatísticaEstatística
Estatística
 
Twitter analysis by Kaify Rais
Twitter analysis by Kaify RaisTwitter analysis by Kaify Rais
Twitter analysis by Kaify Rais
 
HR / Talent Analytics
HR / Talent AnalyticsHR / Talent Analytics
HR / Talent Analytics
 
Mecanica exercicios resolvidos
Mecanica exercicios resolvidosMecanica exercicios resolvidos
Mecanica exercicios resolvidos
 
Text Mining with R -- an Analysis of Twitter Data
Text Mining with R -- an Analysis of Twitter DataText Mining with R -- an Analysis of Twitter Data
Text Mining with R -- an Analysis of Twitter Data
 

Semelhante a Introdução à Programação em R na Universidade do Porto

Apostila de Robotica
Apostila de RoboticaApostila de Robotica
Apostila de RoboticaIsvaldo Souza
 
Curso de robotica movel
Curso de robotica movelCurso de robotica movel
Curso de robotica movelRibeiro Baieta
 
Aula 3 com propostas
Aula 3 com propostasAula 3 com propostas
Aula 3 com propostasnehos
 
Ncl e Lua - desenvolvendo aplicações interativas para tv digital
Ncl e Lua - desenvolvendo aplicações interativas para tv digitalNcl e Lua - desenvolvendo aplicações interativas para tv digital
Ncl e Lua - desenvolvendo aplicações interativas para tv digitalRafael Carvalho
 
Ap apostila arduino-rev4
Ap   apostila arduino-rev4Ap   apostila arduino-rev4
Ap apostila arduino-rev4ariferreira3
 
Apostila ruby-completa
Apostila ruby-completaApostila ruby-completa
Apostila ruby-completamako2887
 
Matematica fcul
Matematica fculMatematica fcul
Matematica fculemantunes
 
Apostila completa de eletronica digita(fct)
Apostila completa de eletronica digita(fct)Apostila completa de eletronica digita(fct)
Apostila completa de eletronica digita(fct)Edaplo
 
Apostila com limites e derivada
Apostila com limites e derivadaApostila com limites e derivada
Apostila com limites e derivadaWalmar de Paula
 
Guia Aberto Android ed.2
Guia Aberto Android ed.2Guia Aberto Android ed.2
Guia Aberto Android ed.2Átila Camurça
 

Semelhante a Introdução à Programação em R na Universidade do Porto (20)

Apostila de Robotica
Apostila de RoboticaApostila de Robotica
Apostila de Robotica
 
Curso de robotica movel
Curso de robotica movelCurso de robotica movel
Curso de robotica movel
 
Manual de portugol
Manual de portugolManual de portugol
Manual de portugol
 
Poojava
PoojavaPoojava
Poojava
 
Poojava
PoojavaPoojava
Poojava
 
Aula 3 com propostas
Aula 3 com propostasAula 3 com propostas
Aula 3 com propostas
 
Ncl e Lua - desenvolvendo aplicações interativas para tv digital
Ncl e Lua - desenvolvendo aplicações interativas para tv digitalNcl e Lua - desenvolvendo aplicações interativas para tv digital
Ncl e Lua - desenvolvendo aplicações interativas para tv digital
 
Ap apostila arduino-rev4
Ap   apostila arduino-rev4Ap   apostila arduino-rev4
Ap apostila arduino-rev4
 
Apostila ruby-completa
Apostila ruby-completaApostila ruby-completa
Apostila ruby-completa
 
Curso C
Curso CCurso C
Curso C
 
Matematica fcul
Matematica fculMatematica fcul
Matematica fcul
 
Resmat2007a
Resmat2007aResmat2007a
Resmat2007a
 
Introdução às redes
Introdução às redesIntrodução às redes
Introdução às redes
 
Apostila de computação gráfica (2006)
Apostila de computação gráfica (2006)Apostila de computação gráfica (2006)
Apostila de computação gráfica (2006)
 
Apostila completa de eletronica digita(fct)
Apostila completa de eletronica digita(fct)Apostila completa de eletronica digita(fct)
Apostila completa de eletronica digita(fct)
 
Tut arduino
Tut arduinoTut arduino
Tut arduino
 
Ap tut arduino
Ap   tut arduinoAp   tut arduino
Ap tut arduino
 
Apostila com limites e derivada
Apostila com limites e derivadaApostila com limites e derivada
Apostila com limites e derivada
 
Guia Aberto Android ed.2
Guia Aberto Android ed.2Guia Aberto Android ed.2
Guia Aberto Android ed.2
 
Sql
SqlSql
Sql
 

Mais de Monica Barros

Monica Barros - Econometria - ENCE 2010 - Resumo Capítulo 9 Gujarati
Monica Barros - Econometria - ENCE 2010 - Resumo Capítulo 9 GujaratiMonica Barros - Econometria - ENCE 2010 - Resumo Capítulo 9 Gujarati
Monica Barros - Econometria - ENCE 2010 - Resumo Capítulo 9 GujaratiMonica Barros
 
Capitulo 8 gujarati resumo
Capitulo 8 gujarati resumoCapitulo 8 gujarati resumo
Capitulo 8 gujarati resumoMonica Barros
 
Monica Barros - Econometria - ENCE - 2010 - Resumo Capitulo 7 Gujarati
Monica Barros - Econometria - ENCE - 2010 - Resumo Capitulo 7 GujaratiMonica Barros - Econometria - ENCE - 2010 - Resumo Capitulo 7 Gujarati
Monica Barros - Econometria - ENCE - 2010 - Resumo Capitulo 7 GujaratiMonica Barros
 
Time series and forecasting from wikipedia
Time series and forecasting from wikipediaTime series and forecasting from wikipedia
Time series and forecasting from wikipediaMonica Barros
 
Barros monica isf2012
Barros monica isf2012Barros monica isf2012
Barros monica isf2012Monica Barros
 
Barros Monica Isf2012
Barros Monica Isf2012Barros Monica Isf2012
Barros Monica Isf2012Monica Barros
 
V29n2a04 Artigo Revista Sobrapo
V29n2a04 Artigo Revista SobrapoV29n2a04 Artigo Revista Sobrapo
V29n2a04 Artigo Revista SobrapoMonica Barros
 
Residential%20 Electrical%20 Energy%20 Consumption%20 Profile%20in%20 Brazil
Residential%20 Electrical%20 Energy%20 Consumption%20 Profile%20in%20 BrazilResidential%20 Electrical%20 Energy%20 Consumption%20 Profile%20in%20 Brazil
Residential%20 Electrical%20 Energy%20 Consumption%20 Profile%20in%20 BrazilMonica Barros
 

Mais de Monica Barros (14)

Monica Barros - Econometria - ENCE 2010 - Resumo Capítulo 9 Gujarati
Monica Barros - Econometria - ENCE 2010 - Resumo Capítulo 9 GujaratiMonica Barros - Econometria - ENCE 2010 - Resumo Capítulo 9 Gujarati
Monica Barros - Econometria - ENCE 2010 - Resumo Capítulo 9 Gujarati
 
Capitulo 8 gujarati resumo
Capitulo 8 gujarati resumoCapitulo 8 gujarati resumo
Capitulo 8 gujarati resumo
 
Monica Barros - Econometria - ENCE - 2010 - Resumo Capitulo 7 Gujarati
Monica Barros - Econometria - ENCE - 2010 - Resumo Capitulo 7 GujaratiMonica Barros - Econometria - ENCE - 2010 - Resumo Capitulo 7 Gujarati
Monica Barros - Econometria - ENCE - 2010 - Resumo Capitulo 7 Gujarati
 
Time series and forecasting from wikipedia
Time series and forecasting from wikipediaTime series and forecasting from wikipedia
Time series and forecasting from wikipedia
 
Barros monica isf2012
Barros monica isf2012Barros monica isf2012
Barros monica isf2012
 
Southeast load
Southeast loadSoutheast load
Southeast load
 
Barros Monica Isf2012
Barros Monica Isf2012Barros Monica Isf2012
Barros Monica Isf2012
 
V30n3a02
V30n3a02V30n3a02
V30n3a02
 
V29n2a04 Artigo Revista Sobrapo
V29n2a04 Artigo Revista SobrapoV29n2a04 Artigo Revista Sobrapo
V29n2a04 Artigo Revista Sobrapo
 
Icord 2007
Icord 2007Icord 2007
Icord 2007
 
Modelagem Revistas
Modelagem RevistasModelagem Revistas
Modelagem Revistas
 
Pulp And Paper Isf
Pulp And Paper IsfPulp And Paper Isf
Pulp And Paper Isf
 
Ecomod 2007
Ecomod 2007Ecomod 2007
Ecomod 2007
 
Residential%20 Electrical%20 Energy%20 Consumption%20 Profile%20in%20 Brazil
Residential%20 Electrical%20 Energy%20 Consumption%20 Profile%20in%20 BrazilResidential%20 Electrical%20 Energy%20 Consumption%20 Profile%20in%20 Brazil
Residential%20 Electrical%20 Energy%20 Consumption%20 Profile%20in%20 Brazil
 

Último

Programa de Intervenção com Habilidades Motoras
Programa de Intervenção com Habilidades MotorasPrograma de Intervenção com Habilidades Motoras
Programa de Intervenção com Habilidades MotorasCassio Meira Jr.
 
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃO
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃOLEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃO
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃOColégio Santa Teresinha
 
Slides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptx
Slides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptxSlides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptx
Slides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptxLuizHenriquedeAlmeid6
 
Aula - 1º Ano - Émile Durkheim - Um dos clássicos da sociologia
Aula - 1º Ano - Émile Durkheim - Um dos clássicos da sociologiaAula - 1º Ano - Émile Durkheim - Um dos clássicos da sociologia
Aula - 1º Ano - Émile Durkheim - Um dos clássicos da sociologiaaulasgege
 
Apostila da CONQUISTA_ para o 6ANO_LP_UNI1.pptx
Apostila da CONQUISTA_ para o 6ANO_LP_UNI1.pptxApostila da CONQUISTA_ para o 6ANO_LP_UNI1.pptx
Apostila da CONQUISTA_ para o 6ANO_LP_UNI1.pptxIsabelaRafael2
 
02. Informática - Windows 10 apostila completa.pdf
02. Informática - Windows 10 apostila completa.pdf02. Informática - Windows 10 apostila completa.pdf
02. Informática - Windows 10 apostila completa.pdfJorge Andrade
 
Bullying - Atividade com caça- palavras
Bullying   - Atividade com  caça- palavrasBullying   - Atividade com  caça- palavras
Bullying - Atividade com caça- palavrasMary Alvarenga
 
trabalho wanda rocha ditadura
trabalho wanda rocha ditaduratrabalho wanda rocha ditadura
trabalho wanda rocha ditaduraAdryan Luiz
 
Guia completo da Previdênci a - Reforma .pdf
Guia completo da Previdênci a - Reforma .pdfGuia completo da Previdênci a - Reforma .pdf
Guia completo da Previdênci a - Reforma .pdfEyshilaKelly1
 
Gerenciando a Aprendizagem Organizacional
Gerenciando a Aprendizagem OrganizacionalGerenciando a Aprendizagem Organizacional
Gerenciando a Aprendizagem OrganizacionalJacqueline Cerqueira
 
A Arte de Escrever Poemas - Dia das Mães
A Arte de Escrever Poemas - Dia das MãesA Arte de Escrever Poemas - Dia das Mães
A Arte de Escrever Poemas - Dia das MãesMary Alvarenga
 
“Sobrou pra mim” - Conto de Ruth Rocha.pptx
“Sobrou pra mim” - Conto de Ruth Rocha.pptx“Sobrou pra mim” - Conto de Ruth Rocha.pptx
“Sobrou pra mim” - Conto de Ruth Rocha.pptxthaisamaral9365923
 
Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)
Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)
Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)Mary Alvarenga
 
E agora?! Já não avalio as atitudes e valores?
E agora?! Já não avalio as atitudes e valores?E agora?! Já não avalio as atitudes e valores?
E agora?! Já não avalio as atitudes e valores?Rosalina Simão Nunes
 
Slides Lição 4, CPAD, Como se Conduzir na Caminhada, 2Tr24.pptx
Slides Lição 4, CPAD, Como se Conduzir na Caminhada, 2Tr24.pptxSlides Lição 4, CPAD, Como se Conduzir na Caminhada, 2Tr24.pptx
Slides Lição 4, CPAD, Como se Conduzir na Caminhada, 2Tr24.pptxLuizHenriquedeAlmeid6
 
Prova uniasselvi tecnologias da Informação.pdf
Prova uniasselvi tecnologias da Informação.pdfProva uniasselvi tecnologias da Informação.pdf
Prova uniasselvi tecnologias da Informação.pdfArthurRomanof1
 
COMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEM
COMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEMCOMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEM
COMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEMVanessaCavalcante37
 
Cultura e Sociedade - Texto de Apoio.pdf
Cultura e Sociedade - Texto de Apoio.pdfCultura e Sociedade - Texto de Apoio.pdf
Cultura e Sociedade - Texto de Apoio.pdfaulasgege
 
Governo Provisório Era Vargas 1930-1934 Brasil
Governo Provisório Era Vargas 1930-1934 BrasilGoverno Provisório Era Vargas 1930-1934 Brasil
Governo Provisório Era Vargas 1930-1934 Brasillucasp132400
 

Último (20)

Programa de Intervenção com Habilidades Motoras
Programa de Intervenção com Habilidades MotorasPrograma de Intervenção com Habilidades Motoras
Programa de Intervenção com Habilidades Motoras
 
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃO
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃOLEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃO
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃO
 
Slides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptx
Slides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptxSlides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptx
Slides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptx
 
Aula - 1º Ano - Émile Durkheim - Um dos clássicos da sociologia
Aula - 1º Ano - Émile Durkheim - Um dos clássicos da sociologiaAula - 1º Ano - Émile Durkheim - Um dos clássicos da sociologia
Aula - 1º Ano - Émile Durkheim - Um dos clássicos da sociologia
 
Apostila da CONQUISTA_ para o 6ANO_LP_UNI1.pptx
Apostila da CONQUISTA_ para o 6ANO_LP_UNI1.pptxApostila da CONQUISTA_ para o 6ANO_LP_UNI1.pptx
Apostila da CONQUISTA_ para o 6ANO_LP_UNI1.pptx
 
02. Informática - Windows 10 apostila completa.pdf
02. Informática - Windows 10 apostila completa.pdf02. Informática - Windows 10 apostila completa.pdf
02. Informática - Windows 10 apostila completa.pdf
 
Bullying - Atividade com caça- palavras
Bullying   - Atividade com  caça- palavrasBullying   - Atividade com  caça- palavras
Bullying - Atividade com caça- palavras
 
XI OLIMPÍADAS DA LÍNGUA PORTUGUESA -
XI OLIMPÍADAS DA LÍNGUA PORTUGUESA      -XI OLIMPÍADAS DA LÍNGUA PORTUGUESA      -
XI OLIMPÍADAS DA LÍNGUA PORTUGUESA -
 
trabalho wanda rocha ditadura
trabalho wanda rocha ditaduratrabalho wanda rocha ditadura
trabalho wanda rocha ditadura
 
Guia completo da Previdênci a - Reforma .pdf
Guia completo da Previdênci a - Reforma .pdfGuia completo da Previdênci a - Reforma .pdf
Guia completo da Previdênci a - Reforma .pdf
 
Gerenciando a Aprendizagem Organizacional
Gerenciando a Aprendizagem OrganizacionalGerenciando a Aprendizagem Organizacional
Gerenciando a Aprendizagem Organizacional
 
A Arte de Escrever Poemas - Dia das Mães
A Arte de Escrever Poemas - Dia das MãesA Arte de Escrever Poemas - Dia das Mães
A Arte de Escrever Poemas - Dia das Mães
 
“Sobrou pra mim” - Conto de Ruth Rocha.pptx
“Sobrou pra mim” - Conto de Ruth Rocha.pptx“Sobrou pra mim” - Conto de Ruth Rocha.pptx
“Sobrou pra mim” - Conto de Ruth Rocha.pptx
 
Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)
Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)
Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)
 
E agora?! Já não avalio as atitudes e valores?
E agora?! Já não avalio as atitudes e valores?E agora?! Já não avalio as atitudes e valores?
E agora?! Já não avalio as atitudes e valores?
 
Slides Lição 4, CPAD, Como se Conduzir na Caminhada, 2Tr24.pptx
Slides Lição 4, CPAD, Como se Conduzir na Caminhada, 2Tr24.pptxSlides Lição 4, CPAD, Como se Conduzir na Caminhada, 2Tr24.pptx
Slides Lição 4, CPAD, Como se Conduzir na Caminhada, 2Tr24.pptx
 
Prova uniasselvi tecnologias da Informação.pdf
Prova uniasselvi tecnologias da Informação.pdfProva uniasselvi tecnologias da Informação.pdf
Prova uniasselvi tecnologias da Informação.pdf
 
COMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEM
COMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEMCOMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEM
COMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEM
 
Cultura e Sociedade - Texto de Apoio.pdf
Cultura e Sociedade - Texto de Apoio.pdfCultura e Sociedade - Texto de Apoio.pdf
Cultura e Sociedade - Texto de Apoio.pdf
 
Governo Provisório Era Vargas 1930-1934 Brasil
Governo Provisório Era Vargas 1930-1934 BrasilGoverno Provisório Era Vargas 1930-1934 Brasil
Governo Provisório Era Vargas 1930-1934 Brasil
 

Introdução à Programação em R na Universidade do Porto

  • 1. Faculdade de Economia Universidade do Porto Introdu¸˜o ` Programa¸˜o em R ca a ca Lu´ Torgo ıs ltorgo@liacc.up.pt Grupo de Matem´tica e Inform´tica a a Outubro de 2006
  • 2. © L. Torgo, 2006. A licence is granted for personal study and classroom use. Redistri- bution in any other form is prohibited. © ´ L. Torgo, 2006. E concedida licen¸a de utiliza¸˜o deste documento para uso pessoal c ca e para ensino. A re-distribui¸ao em qualquer outro tipo de formato ´ proibida. c˜ e
  • 3. Conte´ do u 1 Introdu¸˜o ao Ambiente ca R 7 1.1 Instala¸˜o do R . . . . ca . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.2 Come¸ar a usar o R . c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.3 Ajuda sobre o R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.4 “Packages” do R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2 Fundamentos da Linguagem R 11 2.1 Os objectos do R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.2 Vectores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 2.3 Opera¸˜es com Vectores . . . co . . . . . . . . . . . . . . . . . . . . . . . . . 14 2.4 Factores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 2.5 Sequˆncias . . . . . . . . . . . e . . . . . . . . . . . . . . . . . . . . . . . . . 18 2.6 Indexa¸˜o . . . . . . . . . . . ca . . . . . . . . . . . . . . . . . . . . . . . . . 20 2.7 Matrizes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 2.8 Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 2.9 Listas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 2.10 Data Frames . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 2.11 S´ries Temporais . . . . . . . e . . . . . . . . . . . . . . . . . . . . . . . . . 31 2.11.1 S´ries Regulares . . . e . . . . . . . . . . . . . . . . . . . . . . . . . 31 2.11.2 S´ries Irregulares . . . e . . . . . . . . . . . . . . . . . . . . . . . . . 36 3 Programa¸˜o em R ca 45 3.1 Interac¸˜o com o Utilizador . . . . . . . ca . . . . . . . . . . . . . . . . . . . 45 3.2 Estruturas de Controlo da Linguagem R . . . . . . . . . . . . . . . . . . . 46 3.2.1 Instru¸˜es Condicionais . . . . . co . . . . . . . . . . . . . . . . . . . 46 3.2.2 Instru¸˜es Iterativas . . . . . . . co . . . . . . . . . . . . . . . . . . . 48 3.2.3 Evitando ciclos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 3.3 Fun¸˜es . . . . . . . . . . . . . . . . . . co . . . . . . . . . . . . . . . . . . . 52 3.3.1 Criar fun¸˜es . . . . . . . . . . . co . . . . . . . . . . . . . . . . . . . 52 3.3.2 Ambientes e “scope” de vari´veis a . . . . . . . . . . . . . . . . . . . 53 3.3.3 Argumentos de fun¸˜es . . . . . co . . . . . . . . . . . . . . . . . . . 54 3.3.4 Lazy evaluation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 3.3.5 Algumas fun¸˜es uteis . . . . . . co ´ . . . . . . . . . . . . . . . . . . . 56 3.4 Objectos, Classes e M´todos . . . . . . . e . . . . . . . . . . . . . . . . . . . 58 3.5 Depura¸˜o de Programas em R . . . . . ca . . . . . . . . . . . . . . . . . . . 60 4 Manipula¸˜o de Dados ca 63 4.1 Carregar dados para o R . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 4.1.1 De ficheiros de texto . . . . . . . . . . . . . . . . . . . . . . . . . . 63 4.1.2 Da Internet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 4.1.3 Do Excel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 4.1.4 De bases de dados . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 4.2 Sumariza¸˜o de dados . . . . . . . . . . . . . . . . ca . . . . . . . . . . . . . 67 4.3 F´rmulas . . . . . . . . . . . . . . . . . . . . . . . o . . . . . . . . . . . . . 70 4.4 Visualiza¸˜o de dados . . . . . . . . . . . . . . . . ca . . . . . . . . . . . . . 71 4.4.1 Gr´ficos Univariados . . . . . . . . . . . . . a . . . . . . . . . . . . . 73 4.4.2 Gr´ficos de 3 Vari´veis . . . . . . . . . . . . a a . . . . . . . . . . . . . 74 4.4.3 Gr´ficos Multivariados . . . . . . . . . . . . a . . . . . . . . . . . . . 78 4.4.4 Gr´ficos Condicionados . . . . . . . . . . . a . . . . . . . . . . . . . 81 4.4.5 Interac¸˜o com Gr´ficos . . . . . . . . . . . ca a . . . . . . . . . . . . . 83 4.4.6 Adicionar Informa¸˜o a Gr´ficos Existentes ca a . . . . . . . . . . . . . 84
  • 4. 4.4.7 Parˆmetros de Gr´ficos . . . . . . . . . . . . . . . . . . . . . . . . a a 90 4.4.8 a a ´ Dividir a Janela de Gr´ficos em V´rias Areas . . . . . . . . . . . . 91 Referˆncias e 95 ´ Indice 97
  • 5. Pref´cio a Este documento tem como objectivo principal fornecer uma introdu¸˜o ` programa¸˜o ca a ca usando a linguagem R. A escolha desta linguagem como ve´ ıculo para aprender a pro- gramar prende-se com os objectivos do curso em que esta disciplina se insere. Uma vez que este curso tem a an´lise de dados e o data mining como um dos assuntos centrais, a o R sendo tamb´m um ambiente de an´lise explorat´ria de dados, permite uma melhor e a o articula¸˜o com outras disciplinas. ca A escolha do R tem ainda outros motivos relacionados com o facto de este ser um software gratuito e de c´digo aberto. Estas caracter´ o ısticas, em conjunto com as suas reconhecidas qualidades, fazem dele uma ferramenta quase ideal para aprender a progra- mar dentro dum contexto de an´lise de dados e sistemas de apoio ` decis˜o. Ao usarem a a a uma ferramenta deste g´nero como plataforma de implementa¸˜o dos conceitos apren- e ca didos, os alunos poder˜o facilmente, pelo seu car´cter gratuito, levar o que aprenderam a a para o cen´rio profissional em que se enquadram ou venham a enquadrar. Al´m disso, a e as suas caracter´ ısticas de c´digo aberto ir˜o facilitar a eventual necessidade de adaptar o a algum dos muitos m´todos dispon´ e ıveis no R, para assim melhor os adequarem aos seus interesses/objectivos.
  • 6.
  • 7. 7 1 Introdu¸˜o ao Ambiente R ca O R (R Development Core Team, 2006) ´ ao mesmo tempo uma linguagem de programa- e O que ´ o R? e ca ¸˜o e um ambiente para computa¸˜o estat´ ca ıstica e gr´ficos. Trata-se de uma linguagem de a programa¸˜o especializada em computa¸˜o com dados. Uma das suas principais caracte- ca ca r´ ısticas ´ o seu car´cter gratuito e a sua disponibilidade para uma gama bastante variada e a de sistemas operativos. Neste documento iremos concentrar a nossa aten¸˜o na vers˜o ca a Windows, mas basicamente tudo o que aqui ´ descrito tamb´m se aplica `s outras vers˜es, e e a o dadas as muito reduzidas diferen¸as entre as vers˜es para as diversas plataformas. c o Apesar do seu car´cter gratuito o R ´ uma ferramenta bastante poderosa com boas a e capacidades ao n´ ıvel da programa¸˜o e um conjunto bastante vasto (e em constante ca crescimento) de packages que acrescentam bastantes potencialidades ` j´ poderosa vers˜o a a a base do R. O R ´ uma variante da linguagem S com a qual John Chambers (Chambers, 1998) e ganhou o prestigiado pr´mio de software da organiza¸˜o ACM. e ca 1.1 Instala¸˜o do R ca Embora o R esteja instalado no sistema inform´tico da FEP, dado o seu car´cter gra- a a tuito, os alunos poder˜o instalar este software nos seus computadores em casa. Para isso a necessitar˜o simplesmente de ligar o computador ` Internet e seguir os passos que des- a a crevemos em seguida. Caso n˜o pretenda realizar a instala¸˜o do R no seu computador, a ca poder´ avan¸ar para a pr´xima sec¸˜o. a c o ca Para instalar o R os alunos dever˜o come¸ar por ligar o seu computador ` Internet. a c a Ap´s esta liga¸˜o dever´ ser feito o download do R a partir do site desta aplica¸˜o, o ca a ca Download do R http://www.r-project.org. Neste site dever´ ser seguido o link com o nome CRAN a no menu dispon´ ` esquerda. Depois de escolher um dos muitos locais espalhados pelo ıvel a mundo para fazer o download, dever´ seguir o link Windows (95 and later) dispon´ a ıvel na sec¸˜o Precompiled Binary Distributions. No ´cran seguinte, deve “entrar” na pasta ca e base e fazer o download do ficheiro R-2.3.1-win32.exe1 . Uma vez efectuado o download do ficheiro mencionado acima, dever´ proceder-se ` a a instala¸˜o do R , bastando para isso executar o ficheiro (carregando duas vezes em cima ca Instala¸˜o do R ca dele no Explorer). De notar que em vers˜es mais recentes do Windows esta instala¸˜o o ca poder´ ter de ser feita pelo utilizador Administrador, por quest˜es de permiss˜es. a o o 1.2 Come¸ar a usar o R c Para se executar o R basta usar ou o ´ıcone que normalmente est´ dispon´ no desktop a ıvel Iniciar o R do Windows, ou ent˜o usar o respectivo item no menu “Start”2 . a A execu¸˜o do R faz aparecer a janela desta aplica¸˜o de que se pode ver um exemplo ca ca na Figura 1. ` A parte os menus que iremos explorar mais tarde, esta janela apresenta o prompt a ´ do R (> ), com o cursor ` sua frente. E aqui que vamos introduzir os comandos que O prompt do R pretendemos que o R execute. Podemos come¸ar por ver um pequeno exemplo do tipo de c interac¸˜o que vamos ter com o R, escrevendo o seguinte comando no prompt e carregando ca em seguida na tecla Enter (esta ´ a forma de mandar o R executar o comando que e Executar comandos acabamos de escrever), > R.version platform i386-pc-mingw32 arch i386 os mingw32 system i386, mingw32 status 1 O nome do ficheiro poder´ variar em vers˜es posteriores do R. Na altura da escrita deste texto a a o vers˜o do R dispon´ a ıvel era a 2.3.1 e da´ o nome do ficheiro. ı 2 Na FEP o R est´ dispon´ a ıvel seguindo o percurso de menus: Start->Programs->Aplications->R.
  • 8. 8 1 ¸˜ INTRODUCAO AO AMBIENTE R Figura 1: O ambiente R. major 2 minor 3.1 year 2006 month 06 day 01 svn rev 38247 language R version.string Version 2.3.1 (2006-06-01) O comando R.version ao ser executado fez aparecer uma s´rie de informa¸˜o sobre e ca a vers˜o do R bem como sobre o computador onde o R est´ a ser executado. a a Terminar o R Para terminar a execu¸˜o do R basta executar o seguinte comando, ca > q() Ao executar este comando ir´ aparecer uma caixa de di´logo como a apresentada na a a Continuar o Figura 2. Se respondermos Yes a esta pergunta o R vai guardar a informa¸˜o contida na ca trabalho mais tarde mem´ria do computador num ficheiro, de modo a que da pr´xima vez que executarmos o o o R no local onde esse ficheiro ´ guardado, ele vai permitir-nos continuar o nosso trabalho e exactamente de onde o estamos a abandonar ao executar o comando q(). A informa¸˜o ca guardada consiste basicamente na hist´ria de comandos que executamos nesta sess˜o que o a agora terminamos, bem como os objectos que criamos na nossa sess˜o. O resultado ser´ a a que o R vai criar 2 ficheiros: um chamado .Rhistory contendo a lista dos comandos que executamos, e outro chamado .RData contendo os objectos criados na sess˜o. Gravar a a sess˜o s´ ter´ interesse se de facto pretendermos continuar o que est´vamos a fazer mais a o a a tarde. Na maior parte das vezes vamos escolher a op¸˜o No que ir´ abandonar o R sem ca a guardar o estado em que est´vamos. Os ficheiros com o estado da sess˜o s˜o sempre a a a gravados no direct´rio actual onde o R est´ a funcionar. Para saber o direct´rio actual o a o do R basta fazer no prompt, > getwd() Em resposta a este comando o R ir´ apresentar no ´cran o direct´rio actual. Para o a e o Alterar o direct´rio o alterar poder-se-´ ou usar a op¸˜o Change dir... do menu File, ou ent˜o usar a fun¸˜o a ca a ca actual setwd() conforme ilustrado no exemplo seguinte, > setwd('U:My DocumentsAulasR') Note a utiliza¸˜o de dois caracteres , em vez do unico caracter como ´ costume em ca ´ e ambientes Windows3 . 3 Acrescente-se a t´ ıtulo de curiosidade que poder´ ser usado em vez destes dois caracteres um unico a ´ caracter “/”.
  • 9. 1.3 Ajuda sobre o R 9 Figura 2: Abandonar o R. 1.3 Ajuda sobre o R O R tem um sistema de ajuda bastante elaborado que lhe permitir´ obter muita informa- a ca ¸˜o extra sobre a linguagem, bem como muitos outros aspectos que lhe est˜o associados. a Obter ajuda no R Nas vers˜es Windows do R, a forma mais f´cil de obter ajuda ´ atrav´s da utiliza¸˜o o a e e ca do menu Help dispon´ ıvel na janela da aplica¸˜o R. Atrav´s deste menu ´ poss´ ca e e ıvel por exemplo, escolher a op¸˜o Html help o que far´ lan¸ar um browser onde poder´ tirar ca a c a partido de uma s´rie de manuais e outros tipo de ajuda dispon´ e ıveis no R. No entanto, se pretende simplesmente obter ajuda sobre uma fun¸˜o em particular ca do R, a forma mais simples ser´ provavelmente usar a fun¸˜o help(), a ca > help(sqrt) Este comando ir´ fazer aparecer uma pequena janela com todo um conjunto de infor- a ma¸˜es uteis sobre a fun¸˜o escolhida, que vai da simples descri¸˜o dos seus argumentos co ´ ca ca at´ exemplos de utiliza¸˜o, bem como fun¸˜es relacionadas. Em alternativa, poder´ e ca co a introduzir antes “? sqrt”, produzindo exactamente o mesmo efeito. Quando n˜o sabemos o nome concreto da fun¸˜o sobre a qual preciamos de ajuda, a ca podemos usar como alternativas as fun¸oes apropos() e help.search(). Genericamente, c˜ ambas produzem uma lista das fun¸˜es do R que contˆm referˆncias ao texto que incluimos co e e como argumento destas fun¸˜es. Experimente por exemplo fazer, apropos(’model’), ou co help.search(’model’). Para d´vidas mais complexas poder´ ainda consultar a muita documenta¸˜o gratuita u a ca dispon´ ıvel no site do R (www.r-project.org), ou a mailing list de apoio dispon´ ıvel no mesmo site. Se optar por esta ultima alternativa recomenda-se que antes de colocar ´ qualquer pergunta fa¸a uma procura pelos arquivos da lista para evitar colocar quest˜es c o j´ respondidas, o que nem sempre ´ bem recebido pelas pessoas que se voluntariam para a e ajudar. Finalmente uma alternativa poderosa que junta v´rias destas formas de ajuda do R a ´ utilizar no R a fun¸˜o RSiteSearch(). Esta fun¸˜o faz lan¸ar um browser que ir´ e ca ca c a mostrar o resultado da procura da “string” que passar como argumento ` fun¸˜o. O a ca resultado da procura envolve toda a ajuda de todas as fun¸˜es do R, ajuda nas mailing co lists, bem como em outros documentos. Por exemplo, se pretendo saber o que existe nestes locais sobre redes neuronais, poderia fazer a seguinte procura, > RSiteSearch('neural networks') 1.4 “Packages” do R Uma instala¸˜o do R vem j´ com um conjunto de packages instaladas. Estas packages n˜o ca a a s˜o mais do que agrega¸˜es de fun¸˜es que foram criadas por algu´m que as disponibilizou a co co e a ` comunidade de forma gratu´ Qualquer pessoa pode criar as suas packages e submetˆ- ıta. e las ao portal do R para que sejam consideradas na lista de packages dispon´ ıveis a´ı. Quando se executa o R s´ algumas fun¸˜es est˜o dispon´ o co a ıveis de imediato. Essas s˜oa as fun¸˜es inclu´ co ıdas nas packages que foram julgadas mais importantes ou de uso mais comum e que s˜o automaticamente carregadas quando se executa o R. Em qualquer a altura poderemos “carregar” uma package que contenha fun¸˜es extra que necessitemos co para o nosso trabalho. Para tal ser poss´ ıvel a package dever´ estar instalada no nosso a computador. Se tal n˜o fˆr o caso teremos que fazer o download da mesma e instal´-la. a o a Este processo ´ simples, desde que o seu computador esteja ligado ` Internet. e a
  • 10. 10 1 ¸˜ INTRODUCAO AO AMBIENTE R Para instalar uma nova package podemos usar a fun¸˜o install.packages(), que ca Instalar novas leva como argumento o nome da package a instalar4 . Depois de indicado um reposit´rio o packages de onde fazer o download da package o R ir´ encarregar-se de todo o processo, inclusiv´ a e da sua instala¸˜o no seu computador. ca Usar packages Para utilizar packages que estejam dispon´ ıveis no seu sistema basta usar a fun¸˜o ca library(), por exemplo, library(rpart) Esta instru¸˜o faz com que a partir de agora passem a estar dispon´ ca ıveis para utiliza¸˜o, ca todos os objectos (fun¸˜es, dados, etc.) definidos nessa package. Cada package instalada co tem uma ajuda espec´ ıfica que pode ser obtida no sistema de ajuda HTML do R que foi descrito na Sec¸˜o 1.3. ca 4 Na realidade podemos instalar v´rias indicando um vector (c.f. Sec¸˜o 2.2) com nomes de packages. a ca
  • 11. 11 2 Fundamentos da Linguagem R 2.1 Os objectos do R O R ´ uma linguagem baseada em objectos. Isto quer dizer que tudo o que n´s vamos e o usar no R est´ guardado na mem´ria do computador sob a forma de um objecto. Todos a o os objectos em R tˆm um nome associado e podem armazenar diferentes tipos de coisas e Objectos do R (n´meros, texto, vectores, matrizes, express˜es, chamadas a fun¸˜es, etc.). u o co Para armazenar algo num objecto usamos o operador de atribui¸˜o. Este operador ca Operador de consiste num sinal < seguido por um sinal -, como se vˆ no exemplo apresentado em se- e atribui¸˜o ca guida, em que guardamos o n´mero 4.5 no objecto que resolvemos chamar taxa.de.juro, u > taxa.de.juro <- 4.5 Para ver o conte´do de um objecto (o que est´ guardado na mem´ria sob um deter- u a o Ver o conte´ do de u minado nome) basta digitar o nome do objecto no prompt do R, carregando em seguida um objecto em Enter. Como resposta o R mostra-nos o conte´do do objecto que lhe indicamos. u Por exemplo, suponhamos que queremos confirmar o conte´do do objecto taxa.de.juro, u > taxa.de.juro [1] 4.5 O estranho [1] que aparece antes do n´mero guardado em taxa.de.juro, tem o u significado “esta linha est´ a mostrar o conte´do de taxa.de.juro a come¸ar no elemento a u c nº 1 do objecto”. O significado disto tornar-se-´ mais ´bvio quando virmos objectos que a o podem armazenar mais do que um elemento, como por exemplo um vector contendo 100 n´meros. u A opera¸˜o de atribui¸˜o ´ destrutiva no sentido que ao atribuir um novo valor a um ca ca e objecto j´ existente, vamos perder o conte´do que ele estava a armazenar anteriormente. a u > taxa.de.juro <- 3.9 > taxa.de.juro [1] 3.9 Tamb´m podemos atribuir express˜es num´ricas a objectos. O resultado de tal ope- e o e Express˜es o ra¸˜o ´ o de que o resultado do c´lculo da express˜o ´ colocado no objecto, e n˜o a ca e a a e a num´ricas e express˜o propriamente dita, a > z <- 5 > w <- z^2 > w [1] 25 > i <- (z * 2 + 45)/2 > i [1] 27.5 Sempre que pretendemos atribuir o resultado de uma express˜o a um objecto e em a seguida ver o seu conte´do (como nos exemplos acima), podemos em alternativa usar a u seguinte sintaxe que nos poupa algum tempo, > (w <- z^2) [1] 25
  • 12. 12 2 FUNDAMENTOS DA LINGUAGEM R Na realidade n˜o ´ necess´rio atribuir o resultado das express˜es a objectos. Isto s´ a e a o o far´ sentido se pretendermos usar o resultado do c´lculo mais tarde, por exemplo noutra a a express˜o. Se pretendermos saber simplesmente o resultado do c´lculo, podemos usar o a a R como uma esp´cie de calculadora, e O R como uma calculadora > (34 + 90)/12.5 [1] 9.92 Sempre que criamos um novo objecto usando a instru¸˜o de atribui¸˜o, ele ir´ ficar na ca ca a mem´ria do computador. Como esta ´ limitada, poderemos apagar os objectos sempre o e Listar os objectos que n˜o precisarmos mais deles. Podemos ver quais os objectos actualmente na mem´ria a o em mem´ria o do computador usando as fun¸˜es ls() ou objects(). Se j´ n˜o necessitamos de algum co a a dos objectos podemos ent˜o apag´-lo com a fun¸˜o rm() como nos exemplos apresentados a a ca em seguida, > ls() [1] "i" "taxa.de.juro" "w" "z" > rm(taxa.de.juro) > rm(z, w) > objects() [1] "i" Nomes v´lidos a O nome dos objectos pode ser formado por qualquer letra mai´scula ou min´scula, u u os d´ ıgitos 0 a 9 (excepto no in´ do nome), e tamb´m o ponto final “.”. Os nomes dos ıcio e objectos em R s˜o sens´ a ıveis `s letras mai´sculas / min´sculas. Isto quer dizer que Cor a u u e cor s˜o dois objectos diferentes para o R. Note tamb´m que n˜o pode usar espa¸os a e a c nos nomes dos objectos. Por exemplo, se pretende ter um objecto que guarda uma determinada taxa de cˆmbio, poderia sentir-se tentado(a) a escolher o nome taxa de a cˆmbio para o objecto, o que iria gerar um erro do R, a > taxa de c^mbio <- 0.05 a Error: syntax error Em alternativa poderia usar o seguinte nome que j´ seria v´lido, a a > taxa.de.c^mbio <- 0.05 a 2.2 Vectores O que ´ um vector e O objecto mais b´sico do R para guardar dados ´ o vector. Um vector ´ uma estrutura a e e de dados que permite armazenar um conjunto de valores do mesmo tipo (por exemplo n´meros) sob um mesmo nome. Esses elementos podem depois ser acedidos individu- u almente usando um esquema de indexa¸˜o que iremos descrever mais ` frente. Este ca a tipo de estrutura de dados ´ bastante util quando pretendemos armazenar v´rias coisas e ´ a relacionadas na mem´ria do computador. Por exemplo, suponhamos que pretendemos o guardar os lucros obtidos pela nossa empresa ao longo dos 12 meses do ano anterior. Em vez de termos 12 objectos diferentes, cada um guardando o lucro em cada mˆs, uma e vez que s˜o n´meros relacionados uns com os outros, faz mais sentido guard´-los todos a u a numa mesma estrutura de dados, que neste caso ser´ um vector com 12 n´meros. Em R, a u mesmo quando atribu´ ımos um unico n´mero a um objecto (por exemplo fazendo x <- ´ u 45), estamos de facto a criar um vector de n´meros com um unico elemento. u ´ Modo e tamanho Todos os vectores em R tˆm um modo e um tamanho. O modo determina o tipo de e dos vectores valores guardado no vector. Em R podemos ter vectores com modo character, logical, numeric e complex. Ou seja, podemos ter vectores para armazenar os seguintes tipos de dados at´micos: conjuntos de caracteres, valores l´gicos (F ou T ou FALSE ou o o
  • 13. 2.2 Vectores 13 TRUE)5 , n´meros inteiros ou reais, e n´meros complexos. O tamanho de um vector ´ u u e o n´mero de elementos que ele cont´m, e pode ser obtido com a fun¸˜o length(). u e ca Na maioria das situa¸˜es vamos criar vectores com mais do que um elemento. Para co Criar vectores isso precisamos de usar a fun¸˜o c() para indicar ao R os elementos que formam o vector ca separando-os por v´ırgulas, > v <- c(4, 7, 23.5, 76.2, 80) > v [1] 4.0 7.0 23.5 76.2 80.0 > length(v) [1] 5 > mode(v) [1] "numeric" Todos os elementos de um vector tˆm que ser do mesmo tipo (modo). Caso tentemos e criar um vector com elementos de tipo diferente o R vai for¸´-los a ser do mesmo tipo, ca Coer¸˜o de tipos ca alterando-os. Vejamos um exemplo disso, > v <- c(4, 7, 23.5, 76.2, 80, "rrt") > v [1] "4" "7" "23.5" "76.2" "80" "rrt" Porque um dos elementos do vector era do tipo caracter, o R passou todos os outros (que eram n´meros) para o tipo caracter, gerando assim um vector de conjuntos de u caracteres (strings). Isto quer dizer que por exemplo o primeiro elemento desse vector ´ e a string “4” e n˜o o n´mero 4, o que tem como consequˆncia, por exemplo, n˜o podermos a u e a usar este elemento numa express˜o num´rica. a e As strings em R s˜o conjuntos de caracteres englobados por aspas ou plicas, a > w <- c("rrt", "ola", "isto e uma string") > w [1] "rrt" "ola" "isto e uma string" Todos os vectores podem ter um elemento especial que ´ o NA. Este valor representa e Valores um valor desconhecido. Por exemplo, se temos os lucros trimestrais de uma empresa desconhecidos guardados num vector, mas por alguma raz˜o desconhecemos o seu valor no terceiro a trimestre, poder´ ıamos usar a seguinte instru¸˜o para criar esse vector, ca > lucros <- c(234000, 245000, NA, 124500) > lucros [1] 234000 245000 NA 124500 Como j´ foi mencionado anteriormente, os elementos de um vector podem ser acedidos a atrav´s de um ´ e ındice. Na sua forma mais simples este ´ ındice ´ um n´mero indicando o e u Aceder a um elemento que pretendemos aceder. Esse n´mero ´ colocado entre parˆntesis rectos a u e e elemento seguir ao nome do vector, > lucros[2] [1] 245000
  • 14. 14 2 FUNDAMENTOS DA LINGUAGEM R Usando esta forma de aceder aos elementos individuais de um vector podemos alterar Alterar um elemen o conte´do de um elemento particular de um vector, u > lucros[3] <- 45000 > lucros [1] 234000 245000 45000 124500 Vectores vazios O R permite-nos criar vectores vazios usando a fun¸˜o vector(), ca > k <- vector() Alterar tamanho de O tamanho de um vector j´ existente pode ser alterado atribuindo mais elementos a a um vector ´ ındices at´ agora inexistentes, e > k[3] <- 45 > k [1] NA NA 45 Repare que os dois primeiros elementos do vector k, que anteriormente era um vector vazio, ficaram com o valor NA ao colocarmos o valor 45 no terceiro elemento. Para diminuirmos o tamanho de um vector podemos usar a instru¸˜o de atribui¸˜o. ca ca Por exemplo, > v <- c(45, 243, 78, 343, 445, 645, 2, 44, 56, 77) > v [1] 45 243 78 343 445 645 2 44 56 77 > v <- c(v[5], v[7]) > v [1] 445 2 Atrav´s do uso de formas de indexa¸˜o mais poderosas que iremos explorar na Sec- e ca c˜o 2.6 vamos conseguir eliminar mais facilmente elementos particulares de um vector. ¸a 2.3 Opera¸oes com Vectores c˜ Um dos aspectos mais poderosos da linguagem R ´ a possibilidade de “vectorizar” a e Opera¸˜es com co maioria das suas fun¸˜es. Isto quer dizer que a maioria das fun¸˜es dispon´ co co ıveis no R , vectores ao serem aplicadas a um vector, produzem como resultado um vector de resultados, que ´ obtido aplicando a fun¸˜o a cada um dos elementos do vector. Vejamos um exemplo e ca com a fun¸˜o sqrt() que serve para calcular ra´ ca ızes quadradas, > v <- c(4, 7, 23.5, 76.2, 80) > x <- sqrt(v) > x [1] 2.000000 2.645751 4.847680 8.729261 8.944272 Ao atribuir a x o resultado da aplica¸˜o da fun¸˜o ao vector v, estamos de facto a ca ca criar um vector com as ra´ ızes quadradas dos n´meros contidos em v. u Esta caracter´ ıstica do R pode ser usada para levar a cabo opera¸˜es aritm´ticas en- co e volvendo vectores, > v1 <- c(4, 6, 87) > v2 <- c(34, 32.4, 12) > v1 + v2
  • 15. 2.4 Factores 15 [1] 38.0 38.4 99.0 O que acontece se tentamos realizar opera¸˜es envolvendo vectores de tamanho dife- co gra da reciclagem rente? O R vai usar um regra de reciclagem dos valores do vector mais curto at´ este e atingir o tamanho do maior. Por exemplo, > v1 <- c(4, 6, 8, 24) > v2 <- c(10, 2) > v1 + v2 [1] 14 8 18 26 ´ E como se o vector c(10,2) fosse de facto c(10,2,10,2). Se os tamanhos n˜o s˜o a a m´ltiplos um do outro, o R imprime um aviso no ´cran, u e > v1 <- c(4, 6, 8, 24) > v2 <- c(10, 2, 4) > v1 + v2 [1] 14 8 12 34 Repare-se que um aviso n˜o ´ um erro, o que quer dizer que a opera¸˜o foi levada a a e ca cabo. Como foi mencionado anteriormente, um n´mero ´ de facto armazenado em R como u e um vector de tamanho 1. Isto d´ bastante jeito para opera¸˜es como a seguinte, a co > v1 <- c(4, 6, 8, 24) > 2 * v1 [1] 8 12 16 48 Repare que o n´mero 2 (de facto o vector c(2)!) foi reciclado at´ atingir o tamanho u e do vector v1, tendo como resultado a multiplica¸˜o dos elementos todos deste vector ca por 2. Como veremos mais tarde esta regra de reciclagem tamb´m se aplica a outros e objectos, como por exemplo matrizes. 2.4 Factores Os factores proporcionam uma forma f´cil e compacta de lidar com dados categ´ricos a o (ou nominais). Este tipo de dados podem ser vistos como vari´veis que podem tomar a Vari´veis nominais a como valores poss´ ıveis um conjunto finito de etiquetas (por exemplo uma vari´vel que a (factores) armazene o estado civil de uma pessoa). Os factores tˆm associados a eles um conjunto e de n´ıveis que s˜o os valores poss´ a ıveis que podem tomar. Como veremos mais tarde v´rias a fun¸˜es do R (por exemplo fun¸˜es ligadas ` visualiza¸˜o de dados) tiram partido do co co a ca facto de guardarmos informa¸˜o categ´rica como factores em vez de usarmos strings. ca o Vejamos como criar factores em R. Suponhamos que pretendemos guardar o sexo de Criar factores 10 indiv´ıduos num vector, > s <- c("f", "m", "m", "m", "f", "m", "f", "m", "f", "f") > s [1] "f" "m" "m" "m" "f" "m" "f" "m" "f" "f" Ao transformarmos um vector de caracteres num factor, o R vai dar-nos a possibilidade de fazer coisas como por exemplo contar quantas vezes ocorre cada valor desse factor. Podemos transformar um vector de caracteres num factor da seguinte forma, 5 Como o R ´ sens´ e ıvel `s letras mai´sculas / min´sculas, True, por exemplo, n˜o ´ um valor l´gico a u u a e o v´lido. a
  • 16. 16 2 FUNDAMENTOS DA LINGUAGEM R > s <- factor(s) > s [1] f m m m f m f m f f Levels: f m Repare que s deixou de ser um vector de caracteres6 . Neste pequeno exemplo, o nosso factor tem dois n´ıveis, ’f’ e ’m’. Suponha agora que temos 4 novos indiv´ ıduos cujo sexo tamb´m pretendemos armaze- e nar. Imagine que por coincidˆncia todos pertencem ao sexo masculino. Se pretendemos e que o factor resultante mantenha os 2 n´ ıveis poss´ ıveis para o sexo de um indiv´ ıduo teremos que fazer, > outro.s <- factor(c("m", "m", "m", "m"), levels = c("f", "m")) > outro.s [1] m m m m Levels: f m Sem o parˆmetro extra, indicando os n´ a ıveis a usar, a fun¸˜o factor() iria dar origem ca a um factor com um unico n´ (’m’), uma vez que este ´ o unico valor que ocorre no ´ ıvel e ´ vector de caracteres que estamos a transformar num factor. Conforme mencionado anteriormente, uma das vantagens de transformar um vector de caracteres num factor, ´ a possibilidade de usar fun¸˜es espec´ e co ıficas para lidar com Contar ocorrˆncias e factores. Uma dessas fun¸˜es permite-nos contar o n´mero de ocorrˆncias de cada valor co u e (n´ ıvel), > table(s) s f m 5 5 > table(outro.s) outro.s f m 0 4 Tabula¸˜es cruzadas co A fun¸˜o table() tamb´m pode ser usada para fazer tabula¸˜es cruzadas de dois ca e co factores, desde que estes tenham o mesmo tamanho. Imaginemos que temos um outro vector com a gama de idades dos indiv´ ıduos cujo sexo est´ armazenado em s. Podemos a fazer uma tabula¸˜o cruzada da idade e do sexo dos 10 indiv´ ca ıduos, da seguinte forma, > idade <- factor(c("adulto", "adulto", "jovem", "jovem", "adulto", + "adulto", "adulto", "jovem", "adulto", "jovem")) > s [1] f m m m f m f m f f Levels: f m > idade [1] adulto adulto jovem jovem adulto adulto adulto jovem adulto jovem Levels: adulto jovem > table(idade, s) 6 De facto, s ´ um tipo especial de vector de n´ meros, uma vez que internamente, o R guarda os factores e u como vectores de n´meros, com tantos valores quantos os n´ u ıveis do factor. Isto pode ser confirmado fazendo mode(s).
  • 17. 2.4 Factores 17 s idade f m adulto 4 2 jovem 1 3 Isto quer dizer que existem 4 indiv´ ıduos que s˜o adultos do sexo feminino, 2 que s˜o a a homens adultos, etc. Repare como introduzimos a primeira instru¸˜o. Como era muito grande, mudamos ca de linha. Uma vez que o R descobre que a instru¸˜o ainda n˜o est´ terminada, apresenta ca a a Comandos a linha seguinte com o prompt de continua¸˜o, que ´ um sinal mais (+). ca e espalhados por Tamb´m ´ poss´ obter facilmente frequˆncias marginais e relativas. Por exemplo, e e ıvel e v´rias linhas a para saber o n´mero total de adultos e jovens far´ u ıamos, Frequˆncias e marginais e relativas > tabela.cruzada <- table(idade, s) > margin.table(tabela.cruzada, 1) idade adulto jovem 6 4 Para obter a mesma informa¸˜o relativamente ao sexo dos indiv´ ca ıduos, bastaria mudar o n´mero 1, que indica que pretendemos os totais por linha (a primeira dimens˜o do u a objecto) da tabela cruzada, para um 2, para obtermos os totais por coluna da tabela cruzada, > margin.table(tabela.cruzada, 2) s f m 5 5 Relativamente a frequˆncias relativas, podemos usar a fun¸˜o prop.table(), de cujo e ca uso apresentamos alguns exemplos, > prop.table(tabela.cruzada, 1) s idade f m adulto 0.6666667 0.3333333 jovem 0.2500000 0.7500000 > prop.table(tabela.cruzada, 2) s idade f m adulto 0.8 0.4 jovem 0.2 0.6 > prop.table(tabela.cruzada) s idade f m adulto 0.4 0.2 jovem 0.1 0.3 No primeiro exemplo, as propor¸˜es s˜o calculadas em rela¸˜o ao total por linha. co a ca Assim, o n´mero 0.6666667 ´ o resultado de dividir 4 (o n´mero de adultos femininos), u e u por 6 (o n´mero total de adultos). No segundo exemplo, as propor¸˜es s˜o relativamente u co a aos totais por coluna, enquanto que no terceiro exemplo s˜o relativas ao n´mero total a u de indiv´ıduos (isto ´, ficamos a saber que o n´mero de adultos masculinos representa e u 20% do total dos indiv´ ıduos). Caso pretendˆssemos, obter os n´mero em percentagem, e u poder´ıamos simplesmente multiplicar as chamadas `s fun¸˜es pelo n´mero 1007 , a co u 7 Refira-se a t´ ıtulo de curiosidade que isto ´ mais um exemplo da regra de reciclagem. e
  • 18. 18 2 FUNDAMENTOS DA LINGUAGEM R > 100 * prop.table(tabela.cruzada) s idade f m adulto 40 20 jovem 10 30 2.5 Sequˆncias e Gerar sequˆncias de e Podem-se gerar sequˆncias em R de v´rias formas. Por exemplo, imaginemos que pre- e a inteiros tendemos criar um vector com os n´mero de 1 a 1000. Em vez de os escrevermos todos, u podemos usar, > x <- 1:1000 o que cria um vector com os n´mero inteiros de 1 a 1000. u Devemos ter algum cuidado com a precedˆncia do operador “:”, que ´ usado para e e gerar sequˆncias, em rela¸˜o aos operadores aritm´ticos. O exemplo seguinte ilustra os e ca e perigos que corremos, > 10:15 - 1 [1] 9 10 11 12 13 14 > 10:(15 - 1) [1] 10 11 12 13 14 Repare o que aconteceu no primeiro exemplo. Devido ao operador “:” ter maior precedˆncia do que o “-”, o R gerou um vector com os n´meros de 10 a 15 e depois e u subtraiu a esse vector o n´mero 1. Devido ` regra da reciclagem isto correspondeu a u a subtrair 1 a todos os elementos do vector, levando ao resultado que vemos acima. J´ no a segundo exemplo, usamos os parˆntesis para indicar ao R que o que pretendemos ´ um e e vector contendo os n´meros desde 10 at´ ao resultado da opera¸˜o 15-1, i.e. 14. u e ca Sequˆncias e O operador “:” tamb´m pode ser usado para gerar sequˆncias descendentes, e e descendentes > 5:0 [1] 5 4 3 2 1 0 Sequˆncias de reais e Para gerar sequˆncias com n´meros reais podemos usar a fun¸˜o seq(), e u ca > seq(-4, 1, 0.5) [1] -4.0 -3.5 -3.0 -2.5 -2.0 -1.5 -1.0 -0.5 0.0 0.5 1.0 No exemplo acima geramos uma sequˆncia formada pelos n´meros a come¸ar em e u c -4 at´ 1 de 0.5 em 0.5. Esta fun¸˜o tem v´rias outras possibilidades para explicitar e ca a a sequˆncia que pretendemos. Alguns exemplos s˜o dados a baixo. Poder´ tamb´m e a a e explorar as potencialidades de ajuda do R, digitando o comando ? seq que mostra o help relativamente ` fun¸˜o seq. a ca > seq(from = 1, to = 5, length = 4) [1] 1.000000 2.333333 3.666667 5.000000 > seq(from = 1, to = 5, length = 2) [1] 1 5 > seq(length = 10, from = -2, by = 0.2)
  • 19. 2.5 Sequˆncias e 19 [1] -2.0 -1.8 -1.6 -1.4 -1.2 -1.0 -0.8 -0.6 -0.4 -0.2 Repare que existe uma diferen¸a subtil na forma como usamos as fun¸˜o seq() nos c ca exemplos acima. De facto, em vez de indicarmos os valores dos argumentos da fun- omes dos ca ¸˜o (como por exemplo em seq(-4,1,0.5), indicamos o nome dos argumentos seguido gumentos de um sinal igual e o valor com o qual pretendemos chamar a fun¸˜o. As duas for- ca mas s˜o equivalentes, no entanto a chamada por nome tem vantagens de legibilidade a e tamb´m quando a fun¸˜o tem muitos argumentos permite-nos desrespeitar a sua or- e ca dem, ou seja, relativamente aos exemplos anteriores obter´ ıamos o mesmo resultado com seq(length=4,from=1,to=5). Iremos analisar com mais detalhe esta quest˜o quando a estudarmos o uso e cria¸˜o de fun¸˜es em R na Sec¸˜o 3.3.1. ca co ca Uma outra fun¸˜o bastante util para gerar sequˆncias ´ a fun¸˜o rep(), ca ´ e e ca Sequˆncias repetidas e > rep(5, 10) [1] 5 5 5 5 5 5 5 5 5 5 > rep("sim", 3) [1] "sim" "sim" "sim" > rep(1:3, 2) [1] 1 2 3 1 2 3 A fun¸˜o gl() pode ser usada para gerar sequˆncias envolvendo factores. A sintaxe ca e Sequˆncias com e desta fun¸˜o ´ gl(k,n), em que k ´ o n´mero de n´ ca e e u ıveis do factor e n o n´mero de u factores repeti¸˜es de cada n´ co ıvel. Vejamos dois exemplos, > gl(3, 5) [1] 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 Levels: 1 2 3 > gl(2, 5, labels = c("nao", "sim")) [1] nao nao nao nao nao sim sim sim sim sim Levels: nao sim Finalmente, o R tem uma s´rie de fun¸˜es para gerar sequˆncias aleat´rias de acordo Sequˆncias e co e o e com uma s´rie de fun¸˜es de distribui¸˜o de probabilidade. Essas fun¸˜es tˆm a forma ge- aleat´rias e co ca co e o n´rica rfunc(n, par1, par2, ...), em que n ´ o n´mero de dados a gerar, e par1, par2, ... e e u s˜o valores de alguns parˆmetros que a fun¸˜o espec´ a a ca ıfica a ser usada possa precisar. Por exemplo, se pretendemos 10 n´meros gerados aleatoriamente de acordo com uma distri- u bui¸˜o normal de m´dia 0 e desvio padr˜o unit´rio, podemos fazer, ca e a a > rnorm(10) [1] 0.6068968 1.2468432 1.8680112 1.3694861 -2.7365075 -0.8887380 [7] 0.2129164 0.8129556 -0.1786157 0.7735804 Se preferirmos 10 n´meros provenientes de uma distribui¸˜o normal com m´dia 10 e u ca e desvio padr˜o 3, far´ a ıamos > rnorm(10, mean = 10, sd = 3) [1] 11.224101 12.993983 9.577280 8.083312 7.553354 13.085718 8.347373 [8] 8.388759 11.020737 4.095438 De igual modo para obter 5 n´meros obtidos de forma aleat´ria de uma distribui¸˜o u o ca t de Student com 10 graus de liberdade, fazemos
  • 20. 20 2 FUNDAMENTOS DA LINGUAGEM R > rt(5, df = 10) [1] 1.1357666 -2.7568824 0.7445925 -0.3963767 1.2472630 O R tem muitas mais fun¸˜es para outras distribui¸˜es de probabilidade, bem como co co fun¸˜es semelhantes para obter a densidade de probabilidade, as densidades acumuladas co e os quartis das distribui¸˜es. No entanto, a explora¸˜o exaustiva destas fun¸˜es sai co ca co fora do ˆmbito desta cadeira, podendo o aluno por exemplo obter mais informa¸˜o no a ca livro Dalgaard (2002), ou ent˜o consultando a ajuda das fun¸˜es que cont´m exemplos e a co e referˆncias a fun¸˜es relacionadas. e co 2.6 Indexa¸˜o ca Na Sec¸˜o 2.2 j´ vimos exemplos de como extrair um elemento de um vector indicando a ca a sua posi¸˜o entre parˆntesis rectos. O R tamb´m nos permite usar vectores dentro desses ca e e Vectores de ´ ındices parˆntesis rectos. Estes vectores chamam-se vectores de ´ e ındices. Existem v´rios tipos de a Vector de ´ ındices vectores de ´ ındices. Os vectores de ´ ındices booleanos extraem de um vector os elementos l´gicos o correspondentes a posi¸˜es verdadeiras. Vejamos um exemplo concreto, co > x <- c(0, -3, 4, -1, 45, 90, -5) > x [1] 0 -3 4 -1 45 90 -5 > x > 0 [1] FALSE FALSE TRUE FALSE TRUE TRUE FALSE > y <- x > 0 A terceira instru¸˜o do c´digo mostrado acima ´ uma condi¸˜o l´gica envolvendo ca o e ca o o vector x. Esta condi¸˜o ´ uma compara¸˜o com o valor zero. Devido ` regra de ca e ca a reciclagem, o resultado desta compara¸˜o ´ um vector de valores l´gicos resultantes de ca e o fazer a compara¸˜o para cada elemento do vector x. Na instru¸˜o seguinte guardamos ca ca este vector l´gico no objecto y. Usando este vector como um vector de ´ o ındices, podemos obter os elementos de x que s˜o maiores do que zero, da seguinte forma, a > x[y] [1] 4 45 90 Como os elementos de y que s˜o verdadeiros (true) s˜o o 3º, 5º e o 6º, isto corres- a a ponde a extrair esses elementos de x, que ´ o resultado que obtemos com a instru¸˜o e ca mostrada acima. Poder´ ıamos obter um resultado igual, evitando criar um novo vector, fazendo > x[x > 0] [1] 4 45 90 Tirando partido da gama de operadores l´gicos dispon´ o ıveis no R, podemos construir vectores de indexa¸˜o l´gicos mais complexos, ca o > x[x <= -2 | x > 5] [1] -3 45 90 -5 > x[x > 40 & x < 100] [1] 45 90
  • 21. 2.6 Indexa¸˜o ca 21 peradores l´gicos o O operador “|” corresponde ao OU (disjun¸˜o) l´gico, enquanto o operador “&” ´ o ca o e E (conjun¸˜o) l´gica. Isto quer dizer que a primeira instru¸˜o d´ como resultado os ca o ca a elementos de x que s˜o menores ou iguais a -2, ou maiores do que 5. O segundo exemplo, a por sua vez, mostra-nos os elementos de x que s˜o maiores do que 40 e menores do que a 100. Note que existem duas variantes destes dois operadores l´gicos com um modo de o funcionamento ligeiramente diferente. Eles s˜o os operadores “||” e “&&”. Ambos fazem a as mesmas opera¸˜es que os anteriores, o OU e o E l´gicos. A diferen¸a reside no facto co o c de os operadores anteriores fazerem essas opera¸˜es de forma vectorial, ou seja elemento co a elemento quando os operandos contˆm mais do que um elemento, o que permite por e exemplo aplicar as opera¸˜es sobre conjuntos de n´meros, como nos exemplos mostrados co u em cima. Ou seja estes operadores produzem um conjunto de resultados (valores T ou F). J´ as variantes com dois s´ a ımbolos, s´ fazem a opera¸˜o sobre o primeiro elemento, ou o ca seja procedem da esquerda para a direita, produzindo um unico resultado. Estas ultimas ´ ´ variantes s˜o essencialmente usadas em instru¸˜es de controlo da execu¸˜o de programas, a co ca como iremos ver na Sec¸˜o 3.2.1. ca O R tamb´m nos permite usar um vector de n´meros inteiros como ´ e u ındice de um Vector de ´ ındices outro vector. Os n´meros desse vector de ´ u ındices correspondem aos elementos a extrair num´ricos e do outro vector, > (v <- c("a", "b", "c", "d", "e", "f", "g", "h", "i", "j")) [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" > v[c(4, 6)] [1] "d" "f" > v[1:3] [1] "a" "b" "c" Podemos ainda usar um vector com n´meros negativos, o que nos permite indicar u ´ Indices negativos quais os elementos a n˜o obter como resultado da indexa¸˜o, a ca > v[-1] [1] "b" "c" "d" "e" "f" "g" "h" "i" "j" > v[-c(4, 6)] [1] "a" "b" "c" "e" "g" "h" "i" "j" > v[-(1:3)] [1] "d" "e" "f" "g" "h" "i" "j" Note bem a importˆncia dos parˆntesis no ultimo exemplo, devido ` precedˆncia do a e ´ a e operador “:” j´ mencionada na Sec¸˜o 2.5. a ca Um vector tamb´m pode ser indexado por um vector de strings tirando partido do e ´ Indices com nomes facto de o R permitir dar nomes aos elementos de um vector atrav´s na fun¸˜o names(). e ca Vectores com os elementos com nomes s˜o por vezes prefer´ a ıveis pois as suas “posi¸˜es” co s˜o mais facilmente memoriz´veis. Suponhamos que t´ a a ınhamos um vector com as taxas de infla¸˜o de 5 pa´ ca ıses europeus. Poder´ıamos criar um vector com nomes da seguinte Dar nomes a forma, elementos de vectores > tx.infl <- c(2.5, 2, 2.1, 2.3, 1.9) > names(tx.infl) <- c("Portugal", "Fran¸a", "Espanha", "It´lia", c a + "Alemanha") > tx.infl
  • 22. 22 2 FUNDAMENTOS DA LINGUAGEM R Portugal Fran¸a c Espanha It´lia Alemanha a 2.5 2.0 2.1 2.3 1.9 Os elementos do vector tx.infl podem agora ser acedidos usando os seus nomes, > tx.infl["Portugal"] Portugal 2.5 > tx.infl[c("Espanha", "Alemanha")] Espanha Alemanha 2.1 1.9 ´ Indices vazios Finalmente, os ´ ındices podem ser vazios, o que tem o significado que todos os elemen- tos s˜o seleccionados. Por exemplo, se pretendemos preencher todas as posi¸˜es de um a co vector com zeros podemos fazer x[] <- 0. De notar, que isto ´ diferente de fazer x <- e 0, que teria como efeito atribuir ao vector x um vector com um unico elemento (zero), ´ enquanto que a primeira alternativa, assumindo que o vector x j´ existia, iria substituir a todos os seus elementos por zero. Tente ambas as alternativas. 2.7 Matrizes Por vezes poderemos estar interessados em armazenar a nossa informa¸˜o em estruturas ca O que ´ uma matriz e de dados com mais do que uma dimens˜o, como ´ o caso dos vectores. As matrizes arran- a e jam a informa¸˜o em duas dimens˜es. Em R, as matrizes n˜o s˜o mais do que vectores ca o a a com uma propriedade especial que ´ a dimens˜o. Vejamos um exemplo. Suponhamos que e a temos doze n´meros correspondentes `s vendas trimestrais durante o ultimo ano, em trˆs u a ´ e Criar uma matriz lojas. As instru¸˜es seguintes permitem “organizar” esses n´meros como uma matriz, co u > vendas <- c(45, 23, 66, 77, 33, 44, 56, 12, 78, 23, 78, 90) > vendas [1] 45 23 66 77 33 44 56 12 78 23 78 90 > dim(vendas) <- c(3, 4) > vendas [,1] [,2] [,3] [,4] [1,] 45 77 56 23 [2,] 23 33 12 78 [3,] 66 44 78 90 Repare como os n´meros foram “espalhados” por uma matriz com 3 linhas e 4 colunas, u que foi a dimens˜o que atribu´ a ımos ao vector vendas atrav´s da fun¸˜o dim(). Na e ca realidade seria mais simples criar a matriz usando uma fun¸˜o espec´ ca ıfica para isso, > vendas <- matrix(c(45, 23, 66, 77, 33, 44, 56, 12, 78, 23, 78, + 90), 3, 4) Como eventualmente ter´ reparado os n´meros foram “espalhados” pela matriz por a u coluna, i.e. primeiro foi preenchida a primeira coluna, depois a segunda, etc. Caso n˜o a seja isto o que pretendemos, poderemos preencher a matriz por linhas da seguinte forma, > vendas <- matrix(c(45, 23, 66, 77, 33, 44, 56, 12, 78, 23, 78, + 90), 3, 4, byrow = T) > vendas
  • 23. 2.7 Matrizes 23 [,1] [,2] [,3] [,4] [1,] 45 23 66 77 [2,] 33 44 56 12 [3,] 78 23 78 90 Nas matrizes tamb´m ´ poss´ dar nomes aos elementos para tornar a leitura da in- e e ıvel forma¸˜o mais leg´ ca ıvel. Vejamos como fazer isso para a nossa matriz de vendas trimestrais nas 3 lojas, Dar nomes `s linhas a e colunas > rownames(vendas) <- c("loja1", "loja2", "loja3") > colnames(vendas) <- c("1.trim", "2.trim", "3.trim", "4.trim") > vendas 1.trim 2.trim 3.trim 4.trim loja1 45 23 66 77 loja2 33 44 56 12 loja3 78 23 78 90 Como a visualiza¸˜o das matrizes sugere, podemos aceder aos elementos individuais ca Aceder aos das matrizes usando um esquema de indexa¸˜o semelhante ao dos vectores, mas desta ca elementos da matriz vez com dois ´ ındices (as dimens˜es da matriz), o > vendas[2, 2] [1] 44 Ou ent˜o, tirando partido dos nomes, a > vendas["loja2", "2.trim"] [1] 44 De igual modo, podemos tirar partido dos esquemas de indexa¸˜o discutidos na Sec- ca ¸˜o 2.6 para seleccionar elementos das matrizes, como mostram os seguintes exemplos, ca > vendas[-2, 2] loja1 loja3 23 23 > vendas[1, -c(2, 4)] 1.trim 3.trim 45 66 Podemos mesmo omitir uma das dimens˜es das matrizes para deste modo obter todos o os elementos da mesma (um ´ ındice vazio), > vendas[1, ] 1.trim 2.trim 3.trim 4.trim 45 23 66 77 > vendas[, "4.trim"] loja1 loja2 loja3 77 12 90 As fun¸˜es cbind() e rbind() podem ser usadas para juntar dois ou mais vectores co ou matrizes, por colunas ou por linhas, respectivamente. Os seguintes exemplos ilustram o seu uso,
  • 24. 24 2 FUNDAMENTOS DA LINGUAGEM R > m1 <- matrix(c(45, 23, 66, 77, 33, 44, 56, 12, 78, 23), 2, 5) > m1 [,1] [,2] [,3] [,4] [,5] [1,] 45 66 33 56 78 [2,] 23 77 44 12 23 > cbind(c(4, 76), m1[, 4]) [,1] [,2] [1,] 4 56 [2,] 76 12 > m2 <- matrix(rep(10, 50), 10, 5) > m2 [,1] [,2] [,3] [,4] [,5] [1,] 10 10 10 10 10 [2,] 10 10 10 10 10 [3,] 10 10 10 10 10 [4,] 10 10 10 10 10 [5,] 10 10 10 10 10 [6,] 10 10 10 10 10 [7,] 10 10 10 10 10 [8,] 10 10 10 10 10 [9,] 10 10 10 10 10 [10,] 10 10 10 10 10 > m3 <- rbind(m1[1, ], m2[5, ]) > m3 [,1] [,2] [,3] [,4] [,5] [1,] 45 66 33 56 78 [2,] 10 10 10 10 10 As regras aritm´ticas e de reciclagem que estudamos anteriormente, tamb´m se apli- e e Reciclagem com cam `s matrizes. Vejamos uns pequenos exemplos, a matrizes > m <- matrix(c(45, 23, 66, 77, 33, 44, 56, 12, 78, 23), 2, 5) > m [,1] [,2] [,3] [,4] [,5] [1,] 45 66 33 56 78 [2,] 23 77 44 12 23 > m * 3 [,1] [,2] [,3] [,4] [,5] [1,] 135 198 99 168 234 [2,] 69 231 132 36 69 > m1 <- matrix(c(45, 23, 66, 77, 33, 44), 2, 3) > m1 [,1] [,2] [,3] [1,] 45 66 33 [2,] 23 77 44 > m2 <- matrix(c(12, 65, 32, 7, 4, 78), 2, 3) > m2
  • 25. 2.7 Matrizes 25 [,1] [,2] [,3] [1,] 12 32 4 [2,] 65 7 78 > m1 + m2 [,1] [,2] [,3] [1,] 57 98 37 [2,] 88 84 122 A aplica¸˜o das opera¸˜es a matrizes (como no exemplo “> m*3” apresentado acima), ca co funciona elemento a elemento como no caso dos vectores. Isto significa que se um ope- rando ´ menor ele ´ reciclado at´ perfazer o tamanho do maior. No entanto, o R tamb´m e e e e possui operadores especiais para as usuais opera¸˜es da ´lgebra matricial. Por exemplo co a a multiplica¸˜o de duas matrizes pode ser feita da seguinte forma, ca Multiplica¸˜o ca matricial > m1 <- matrix(c(45, 23, 66, 77, 33, 44), 2, 3) > m1 [,1] [,2] [,3] [1,] 45 66 33 [2,] 23 77 44 > m2 <- matrix(c(5, 3, 466, 54.5, 3.2, -34), 3, 2) > m2 [,1] [,2] [1,] 5 54.5 [2,] 3 3.2 [3,] 466 -34.0 > m1 %*% m2 [,1] [,2] [1,] 15801 1541.7 [2,] 20850 3.9 Atente no operador especial (%*%) para simbolizar que se trata da multiplica¸˜o ma- ca tricial e n˜o a usual multiplica¸˜o. A multiplica¸˜o matricial tem, como ´ sabido, regras a ca ca e especiais no que concerne, por exemplo, ` dimens˜o das matrizes envolvidas, pelo que a a n˜o poder´ ser usada com quaisquer matrizes. a a Ainda no contexto da ´lgebra matricial, o R tem muitas outras fun¸˜es, como por a co exemplo a fun¸˜o t() para obter a transposta de uma matriz quadrada, ca Transposta de uma matriz > t(m1) [,1] [,2] [1,] 45 23 [2,] 66 77 [3,] 33 44 ou a fun¸˜o det() para calcular o determinante de uma matriz, ca Determinante de uma matriz > m <- matrix(c(34, -23, 43, 5), 2, 2) > det(m) [1] 1159 ´ E tamb´m poss´ usar a fun¸˜o solve() para obter a inversa de uma matriz, e ıvel ca Inversa de uma matriz