Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


programação em R, Notas de estudo de Cultura

apostila de programação em R desenvolvida por Luiz Torgo

Tipologia: Notas de estudo

2011

Compartilhado em 29/08/2011

cleonis-viater-figueira-1
cleonis-viater-figueira-1 🇧🇷

1 documento

1 / 99

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
Faculdade de Economia
Universidade do Porto
Introdu¸ao `a Programa¸ao em R
Lu´ıs Torgo
Grupo de Matem´atica e Inform´atica
Outubro de 2006
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33
pf34
pf35
pf36
pf37
pf38
pf39
pf3a
pf3b
pf3c
pf3d
pf3e
pf3f
pf40
pf41
pf42
pf43
pf44
pf45
pf46
pf47
pf48
pf49
pf4a
pf4b
pf4c
pf4d
pf4e
pf4f
pf50
pf51
pf52
pf53
pf54
pf55
pf56
pf57
pf58
pf59
pf5a
pf5b
pf5c
pf5d
pf5e
pf5f
pf60
pf61
pf62
pf63

Pré-visualização parcial do texto

Baixe programação em R e outras Notas de estudo em PDF para Cultura, somente na Docsity!

Faculdade de Economia

Universidade do Porto

Introdu¸c˜ao `a Programa¸c˜ao em R

Lu´ıs Torgo

[email protected]

Grupo de Matem´atica e Inform´atica

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¸´ ca de utiliza¸c˜ao deste documento para uso pessoal

e para ensino. A re-distribui¸c˜ao em qualquer outro tipo de formato ´e proibida.

  • 1 Introdu¸c˜ao ao Ambiente R
    • 1.1 Instala¸c˜ao do R
    • 1.2 Come¸car a usar o R
    • 1.3 Ajuda sobre o R
    • 1.4 “Packages” do R
  • 2 Fundamentos da Linguagem R
    • 2.1 Os objectos do R
    • 2.2 Vectores
    • 2.3 Opera¸c˜oes com Vectores
    • 2.4 Factores
    • 2.5 Sequˆencias
    • 2.6 Indexa¸c˜ao
    • 2.7 Matrizes
    • 2.8 Arrays
    • 2.9 Listas
    • 2.10 Data Frames
    • 2.11 S´eries Temporais
      • 2.11.1 S´eries Regulares
      • 2.11.2 S´eries Irregulares
  • 3 Programa¸c˜ao em R
    • 3.1 Interac¸c˜ao com o Utilizador
    • 3.2 Estruturas de Controlo da Linguagem R
      • 3.2.1 Instru¸c˜oes Condicionais
      • 3.2.2 Instru¸c˜oes Iterativas
      • 3.2.3 Evitando ciclos
    • 3.3 Fun¸c˜oes
      • 3.3.1 Criar fun¸c˜oes
      • 3.3.2 Ambientes e “scope” de vari´aveis
      • 3.3.3 Argumentos de fun¸c˜oes
      • 3.3.4 Lazy evaluation
      • 3.3.5 Algumas fun¸c˜oes ´uteis
    • 3.4 Objectos, Classes e M´etodos
    • 3.5 Depura¸c˜ao de Programas em R
  • 4 Manipula¸c˜ao de Dados
    • 4.1 Carregar dados para o R
      • 4.1.1 De ficheiros de texto
      • 4.1.2 Da Internet
      • 4.1.3 Do Excel
      • 4.1.4 De bases de dados
    • 4.2 Sumariza¸c˜ao de dados
    • 4.3 F´ormulas
    • 4.4 Visualiza¸c˜ao de dados
      • 4.4.1 Gr´aficos Univariados
      • 4.4.2 Gr´aficos de 3 Vari´aveis
      • 4.4.3 Gr´aficos Multivariados
      • 4.4.4 Gr´aficos Condicionados
      • 4.4.5 Interac¸c˜ao com Gr´aficos
      • 4.4.6 Adicionar Informa¸c˜ao a Gr´aficos Existentes
      • 4.4.7 Parˆametros de Gr´aficos
      • 4.4.8 Dividir a Janela de Gr´aficos em V´arias Areas´
    • Referˆencias
  • ´Indice

Pref´acio

Este documento tem como objectivo principal fornecer uma introdu¸c˜ao a programa¸c˜ao 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´alise de dados e o data mining como um dos assuntos centrais, o R sendo tamb´em um ambiente de an´alise explorat´oria de dados, permite uma melhor articula¸c˜ao com outras disciplinas. A escolha do R tem ainda outros motivos relacionados com o facto de este ser um software gratuito e de c´odigo aberto. Estas caracter´ısticas, em conjunto com as suas reconhecidas qualidades, fazem dele uma ferramenta quase ideal para aprender a progra- mar dentro dum contexto de an´alise de dados e sistemas de apoioa decis˜ao. Ao usarem uma ferramenta deste g´enero como plataforma de implementa¸c˜ao dos conceitos apren- didos, os alunos poder˜ao facilmente, pelo seu car´acter gratuito, levar o que aprenderam para o cen´ario profissional em que se enquadram ou venham a enquadrar. Al´em disso, as suas caracter´ısticas de c´odigo aberto ir˜ao facilitar a eventual necessidade de adaptar algum dos muitos m´etodos dispon´ıveis no R, para assim melhor os adequarem aos seus interesses/objectivos.

1 Introdu¸c˜ao ao Ambiente R

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

1.1 Instala¸c˜ao do R

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

1.2 Come¸car a usar o R

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

R.version platform i386-pc-mingw arch i os mingw system i386, mingw status

(^1) O nome do ficheiro poder´a variar em vers˜oes posteriores do R. Na altura da escrita deste texto a vers˜ao do R dispon´ıvel era a 2.3.1 e da´ı o nome do ficheiro. (^2) Na FEP o R est´a dispon´ıvel seguindo o percurso de menus: Start->Programs->Aplications->R.

8 1 INTRODU ¸C ˜AO AO AMBIENTE R

Figura 1: O ambiente R.

major 2 minor 3. 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´erie de informa¸c˜ao sobre a vers˜ao do R bem como sobre o computador onde o R est´a a ser executado. Terminar o R Para terminar a execu¸c˜ao do R basta executar o seguinte comando,

q()

Ao executar este comando ir´a aparecer uma caixa de di´alogo como a apresentada na Continuar o Figura 2. Se respondermos Yes a esta pergunta o R vai guardar a informa¸c˜ao contida na trabalho mais tarde mem´oria do computador num ficheiro, de modo a que da pr´oxima vez que executarmos o R no local onde esse ficheiro ´e guardado, ele vai permitir-nos continuar o nosso trabalho exactamente de onde o estamos a abandonar ao executar o comando q(). A informa¸c˜ao guardada consiste basicamente na hist´oria de comandos que executamos nesta sess˜ao que agora terminamos, bem como os objectos que criamos na nossa sess˜ao. O resultado ser´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˜ao. Gravar a sess˜ao s´o ter´a interesse se de facto pretendermos continuar o que est´avamos a fazer mais tarde. Na maior parte das vezes vamos escolher a op¸c˜ao No que ir´a abandonar o R sem guardar o estado em que est´avamos. Os ficheiros com o estado da sess˜ao s˜ao sempre gravados no direct´orio actual onde o R est´a a funcionar. Para saber o direct´orio actual do R basta fazer no prompt,

getwd()

Em resposta a este comando o R ir´a apresentar no ´ecran o direct´orio actual. Para o Alterar o direct´orio alterar poder-se-´a ou usar a op¸c˜ao Change dir... do menu File, ou ent˜ao usar a fun¸c˜ao actual setwd() conforme ilustrado no exemplo seguinte,

setwd('U:\My Documents\AulasR')

Note a utiliza¸c˜ao de dois caracteres \, em vez do ´unico caracter como ´e costume em ambientes Windows^3. (^3) Acrescente-se a t´ıtulo de curiosidade que poder´a ser usado em vez destes dois caracteres um ´unico caracter “/”.

10 1 INTRODU ¸C ˜AO AO AMBIENTE R

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

library(rpart)

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

(^4) Na realidade podemos instalar v´arias indicando um vector (c.f. Sec¸c˜ao 2.2) com nomes de packages.

2 Fundamentos da Linguagem R

2.1 Os objectos do R

O R ´e uma linguagem baseada em objectos. Isto quer dizer que tudo o que n´os vamos usar no R est´a guardado na mem´oria do computador sob a forma de um objecto. Todos os objectos em R tˆem um nome associado e podem armazenar diferentes tipos de coisas Objectos do R (n´umeros, texto, vectores, matrizes, express˜oes, chamadas a fun¸c˜oes, etc.). Para armazenar algo num objecto usamos o operador de atribui¸c˜ao. Este operador Operador de consiste num sinal < seguido por um sinal - , como se vˆe no exemplo apresentado em se- atribui¸c˜ao guida, em que guardamos o n´umero 4.5 no objecto que resolvemos chamar taxa.de.juro,

taxa.de.juro <- 4.

Para ver o conte´udo de um objecto (o que est´a guardado na mem´oria sob um deter- Ver o conte´udo de 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´udo do objecto que lhe indicamos. Por exemplo, suponhamos que queremos confirmar o conte´udo do objecto taxa.de.juro,

taxa.de.juro

[1] 4.

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

taxa.de.juro <- 3. taxa.de.juro

[1] 3.

Tamb´em podemos atribuir express˜oes num´ericas a objectos. O resultado de tal ope- Express˜oes ra¸c˜ao ´e o de que o resultado do c´alculo da express˜ao ´e colocado no objecto, e n˜ao a num´ericas express˜ao propriamente dita,

z <- 5 w <- z^ w

[1] 25

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

[1] 27.

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

(w <- z^2)

[1] 25

2.2 Vectores 13

TRUE)^5 , n´umeros inteiros ou reais, e n´umeros complexos. O tamanho de um vector ´e o n´umero de elementos que ele cont´em, e pode ser obtido com a fun¸c˜ao length(). Na maioria das situa¸c˜oes vamos criar vectores com mais do que um elemento. Para Criar vectores isso precisamos de usar a fun¸c˜ao c() para indicar ao R os elementos que formam o vector 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.

length(v)

[1] 5

mode(v)

[1] "numeric"

Todos os elementos de um vector tˆem que ser do mesmo tipo (modo). Caso tentemos criar um vector com elementos de tipo diferente o R vai for¸c´a-los a ser do mesmo tipo, Coer¸c˜ao de tipos 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´umeros) para o tipo caracter, gerando assim um vector de conjuntos de caracteres (strings). Isto quer dizer que por exemplo o primeiro elemento desse vector ´e a string “4” e n˜ao o n´umero 4, o que tem como consequˆencia, por exemplo, n˜ao podermos usar este elemento numa express˜ao num´erica. As strings em R s˜ao conjuntos de caracteres englobados por aspas ou plicas,

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 ´e o NA. Este valor representa Valores um valor desconhecido. Por exemplo, se temos os lucros trimestrais de uma empresa desconhecidos guardados num vector, mas por alguma raz˜ao desconhecemos o seu valor no terceiro trimestre, poder´ıamos usar a seguinte instru¸c˜ao para criar esse vector,

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

[1] 234000 245000 NA 124500

Como j´a foi mencionado anteriormente, os elementos de um vector podem ser acedidos atrav´es de um ´ındice. Na sua forma mais simples este ´ındice ´e um n´umero indicando o Aceder a um elemento que pretendemos aceder. Esse n´umero ´e colocado entre parˆentesis rectos a 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´udo de um elemento particular de um vector,

lucros[3] <- 45000 lucros

[1] 234000 245000 45000 124500

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

k <- vector()

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

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¸c˜ao de atribui¸c˜ao. 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´es do uso de formas de indexa¸c˜ao mais poderosas que iremos explorar na Sec- ¸c˜ao 2.6 vamos conseguir eliminar mais facilmente elementos particulares de um vector.

2.3 Opera¸c˜oes com Vectores

Um dos aspectos mais poderosos da linguagem R ´e a possibilidade de “vectorizar” a Opera¸c˜oes com maioria das suas fun¸c˜oes. Isto quer dizer que a maioria das fun¸c˜oes dispon´ıveis no R , vectores ao serem aplicadas a um vector, produzem como resultado um vector de resultados, que ´e obtido aplicando a fun¸c˜ao a cada um dos elementos do vector. Vejamos um exemplo com a fun¸c˜ao sqrt() que serve para calcular ra´ı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.

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

v1 <- c(4, 6, 87) v2 <- c(34, 32.4, 12) v1 + v

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 caracteres^6. Neste pequeno exemplo, o nosso factor tem dois n´ıveis, ’f’ e ’m’. Suponha agora que temos 4 novos indiv´ıduos cujo sexo tamb´em pretendemos armaze- nar. Imagine que por coincidˆencia todos pertencem ao sexo masculino. Se pretendemos 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ˆametro extra, indicando os n´ıveis a usar, a fun¸c˜ao factor() iria dar origem a um factor com um ´unico n´ıvel (’m’), uma vez que este ´e o ´unico valor que ocorre no vector de caracteres que estamos a transformar num factor. Conforme mencionado anteriormente, uma das vantagens de transformar um vector de caracteres num factor, ´e a possibilidade de usar fun¸c˜oes espec´ıficas para lidar com Contar ocorrˆencias factores. Uma dessas fun¸c˜oes permite-nos contar o n´umero de ocorrˆencias de cada valor (n´ıvel),

table(s)

s f m 5 5

table(outro.s)

outro.s f m 0 4

Tabula¸c˜oes cruzadas A fun¸c˜ao table() tamb´em pode ser usada para fazer tabula¸c˜oes cruzadas de dois 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´a armazenado em s. Podemos fazer uma tabula¸c˜ao cruzada da idade e do sexo dos 10 indiv´ı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 ´e um tipo especial de vector de n´umeros, uma vez que internamente, o R guarda os factores como vectores de n´umeros, com tantos valores quantos os n´ı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˜ao adultos do sexo feminino, 2 que s˜ao homens adultos, etc. Repare como introduzimos a primeira instru¸c˜ao. Como era muito grande, mudamos de linha. Uma vez que o R descobre que a instru¸c˜ao ainda n˜ao est´a terminada, apresenta Comandos espalhados por v´arias linhas

a linha seguinte com o prompt de continua¸c˜ao, que ´e um sinal mais (+). Tamb´em ´e poss´ıvel obter facilmente frequˆencias marginais e relativas. Por exemplo, Frequˆencias marginais e relativas

para saber o n´umero total de adultos e jovens far´ıamos,

tabela.cruzada <- table(idade, s) margin.table(tabela.cruzada, 1)

idade adulto jovem 6 4

Para obter a mesma informa¸c˜ao relativamente ao sexo dos indiv´ıduos, bastaria mudar o n´umero 1, que indica que pretendemos os totais por linha (a primeira dimens˜ao do 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ˆencias relativas, podemos usar a fun¸c˜ao prop.table(), de cujo uso apresentamos alguns exemplos,

prop.table(tabela.cruzada, 1)

s idade f m adulto 0.6666667 0. jovem 0.2500000 0.

prop.table(tabela.cruzada, 2)

s idade f m adulto 0.8 0. jovem 0.2 0.

prop.table(tabela.cruzada)

s idade f m adulto 0.4 0. jovem 0.1 0.

No primeiro exemplo, as propor¸c˜oes s˜ao calculadas em rela¸c˜ao ao total por linha. Assim, o n´umero 0.6666667 ´e o resultado de dividir 4 (o n´umero de adultos femininos), por 6 (o n´umero total de adultos). No segundo exemplo, as propor¸c˜oes s˜ao relativamente aos totais por coluna, enquanto que no terceiro exemplo s˜ao relativas ao n´umero total de indiv´ıduos (isto ´e, ficamos a saber que o n´umero de adultos masculinos representa 20% do total dos indiv´ıduos). Caso pretendˆessemos, obter os n´umero em percentagem, poder´ıamos simplesmente multiplicar as chamadas `as fun¸c˜oes pelo n´umero 100^7 ,

(^7) Refira-se a t´ıtulo de curiosidade que isto ´e mais um exemplo da regra de reciclagem.

2.5 Sequˆencias 19

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

Repare que existe uma diferen¸ca subtil na forma como usamos as fun¸c˜ao seq() nos exemplos acima. De facto, em vez de indicarmos os valores dos argumentos da fun- omes dos ¸c˜ao (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¸c˜ao. As duas for- mas s˜ao equivalentes, no entanto a chamada por nome tem vantagens de legibilidade e tamb´em quando a fun¸c˜ao tem muitos argumentos permite-nos desrespeitar a sua or- 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˜ao quando estudarmos o uso e cria¸c˜ao de fun¸c˜oes em R na Sec¸c˜ao 3.3.1. Uma outra fun¸c˜ao bastante ´util para gerar sequˆencias ´e a fun¸c˜ao rep(), Sequˆencias repetidas

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¸c˜ao gl() pode ser usada para gerar sequˆencias envolvendo factores. A sintaxe Sequˆencias com desta fun¸c˜ao ´e gl(k,n), em que k ´e o n´umero de n´ıveis do factor e n o n´umero de factores repeti¸c˜oes de cada n´ı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´erie de fun¸c˜oes para gerar sequˆencias aleat´orias de acordo Sequˆencias com uma s´erie de fun¸c˜oes de distribui¸c˜ao de probabilidade. Essas fun¸c˜oes tˆem a forma ge- aleat´orias n´erica rfunc(n, par1, par2, ...), em que n ´e o n´umero de dados a gerar, e par1, par2, ... s˜ao valores de alguns parˆametros que a fun¸c˜ao espec´ıfica a ser usada possa precisar. Por exemplo, se pretendemos 10 n´umeros gerados aleatoriamente de acordo com uma distri- bui¸c˜ao normal de m´edia 0 e desvio padr˜ao unit´ario, podemos fazer,

rnorm(10)

[1] 0.6068968 1.2468432 1.8680112 1.3694861 -2.7365075 -0. [7] 0.2129164 0.8129556 -0.1786157 0.

Se preferirmos 10 n´umeros provenientes de uma distribui¸c˜ao normal com m´edia 10 e desvio padr˜ao 3, far´ıamos

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

[1] 11.224101 12.993983 9.577280 8.083312 7.553354 13.085718 8. [8] 8.388759 11.020737 4.

De igual modo para obter 5 n´umeros obtidos de forma aleat´oria de uma distribui¸c˜ao 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.

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

2.6 Indexa¸c˜ao

Na Sec¸c˜ao 2.2 j´a vimos exemplos de como extrair um elemento de um vector indicando a sua posi¸c˜ao entre parˆentesis rectos. O R tamb´em nos permite usar vectores dentro desses Vectores de ´ındices parˆentesis rectos. Estes vectores chamam-se vectores de ´ındices. Existem v´arios tipos de Vector de ´ındices vectores de ´ındices. Os vectores de ´ındices booleanos extraem de um vector os elementos l´ogicos correspondentes a posi¸c˜oes verdadeiras. Vejamos um exemplo concreto,

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

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

x > 0

[1] FALSE FALSE TRUE FALSE TRUE TRUE FALSE

y <- x > 0

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

x[y]

[1] 4 45 90

Como os elementos de y que s˜ao verdadeiros (true) s˜ao o 3º, 5º e o 6º, isto corres- ponde a extrair esses elementos de x, que ´e o resultado que obtemos com a instru¸c˜ao 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´ogicos dispon´ıveis no R, podemos construir vectores de indexa¸c˜ao l´ogicos mais complexos,

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

[1] -3 45 90 -

x[x > 40 & x < 100]

[1] 45 90