



























































































Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Encontra documentos específicos para os exames da tua universidade
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
apostila de programação em R desenvolvida por Luiz Torgo
Tipologia: Notas de estudo
1 / 99
Esta página não é visível na pré-visualização
Não perca as partes importantes!




























































































© 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.
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.
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.
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.
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 “/”.
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
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
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.
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
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",
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
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
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.
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