99
Uma Introdução ao R Tabela de Conteúdos Uma Introdução ao R Prefácio 1 Introdução e preliminares 1.1 R O ambiente 1,2 software e documentação relacionada 1,3 R e estatísticas 1,4 R eo sistema de janelas 1.5 Usando R interativamente Uma sessão introdutória 1,6 1,7 Obter ajuda com funções e características 1,8 comandos R, maiúsculas e minúsculas, etc Lembre-se 1,9 e correção dos comandos anteriores 1,10 executar comandos a partir de ou desviar a saída para um arquivo 1,11 permanência de dados e objetos de remoção Duas manipulações simples, números e vetores 2,1 Vetores e atribuição 2,2 aritmética Vector 2,3 gerar seqüências regulares 2,4 vetores lógicos 2,5 valores em falta 2,6 Personagem vetores Índice de 2,7 vetores; seleção e modificação de subconjuntos de um conjunto de dados 2,8 Outros tipos de objetos 3 Objetos, seus modos e atributos 3,1 atributos intrínsecos: modo e tempo 3.2 Alterando o comprimento de um objeto 3,3 obter e definir atributos 3,4 A classe de um objeto 4 e ordenada desordenadas fatores Um exemplo específico 4,1 4.2 A função tapply() e matrizes irregulares 4,3 fatores ordenada 5 matrizes e matrizes 5,1 Arrays 5,2 a indexação de matriz. Subseções de uma matriz 5,3 matrizes Índice 5.4 O array() função 5.4.1 vetores e aritmética mista matriz. A regra da reciclagem 5,5 exterior O produto de duas matrizes 5,6 transposição generalizada de uma matriz 5,7 instalações Matrix 5.7.1 A multiplicação de matrizes 5.7.2 equações lineares e inversão 5.7.3 Autovalores e autovetores 5.7.4 decomposição em valores singulares e determinantes 5.7.5 ajuste dos mínimos quadrados e decomposição QR 5,8 Formação matrizes particionadas, cbind() e rbind() Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-... 1 de 99 25/02/2011 10:36

r Manul Port

Embed Size (px)

Citation preview

Page 1: r Manul Port

Uma Introdução ao R

Tabela de Conteúdos

Uma Introdução ao RPrefácio1 Introdução e preliminares

1.1 R O ambiente1,2 software e documentação relacionada1,3 R e estatísticas1,4 R eo sistema de janelas1.5 Usando R interativamenteUma sessão introdutória 1,61,7 Obter ajuda com funções e características1,8 comandos R, maiúsculas e minúsculas, etcLembre-se 1,9 e correção dos comandos anteriores1,10 executar comandos a partir de ou desviar a saída para um arquivo1,11 permanência de dados e objetos de remoção

Duas manipulações simples, números e vetores2,1 Vetores e atribuição2,2 aritmética Vector2,3 gerar seqüências regulares2,4 vetores lógicos2,5 valores em falta2,6 Personagem vetoresÍndice de 2,7 vetores; seleção e modificação de subconjuntos de um conjunto dedados2,8 Outros tipos de objetos

3 Objetos, seus modos e atributos3,1 atributos intrínsecos: modo e tempo3.2 Alterando o comprimento de um objeto3,3 obter e definir atributos3,4 A classe de um objeto

4 e ordenada desordenadas fatoresUm exemplo específico 4,14.2 A função tapply() e matrizes irregulares4,3 fatores ordenada

5 matrizes e matrizes5,1 Arrays5,2 a indexação de matriz. Subseções de uma matriz5,3 matrizes Índice5.4 O array() função

5.4.1 vetores e aritmética mista matriz. A regra da reciclagem5,5 exterior O produto de duas matrizes5,6 transposição generalizada de uma matriz5,7 instalações Matrix

5.7.1 A multiplicação de matrizes5.7.2 equações lineares e inversão5.7.3 Autovalores e autovetores5.7.4 decomposição em valores singulares e determinantes5.7.5 ajuste dos mínimos quadrados e decomposição QR

5,8 Formação matrizes particionadas, cbind() e rbind()

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

1 de 99 25/02/2011 10:36

Page 2: r Manul Port

5,9 concatenação A função, c() , com matrizes5,10 tabelas de freqüência de fatores

6 listas e quadros de dadosListas de 6,16,2 Construir e modificar listas

6.2.1 Listas de concatenação6,3 quadros de dados

6.3.1 Fazendo quadros de dados6.3.2 attach() and detach()6.3.3 Trabalhando com quadros de dados6.3.4 Anexando listas arbitrárias6.3.5 Gerenciando o caminho de pesquisa

7 Os dados de leitura de arquivos7.1 O read.table() função7.2 A scan() função7,3 datasets Acessando builtin

7.3.1 Carregando dados a partir de R outros pacotes7,4 Editando dados

8 As distribuições de probabilidade8,1 R, um conjunto de quadros estatísticos8,2 Examinando a distribuição de um conjunto de dados8,3 e dois testes de amostra de um

9 Agrupamento, loops e execução condicional9,1 expressões Agrupado9,2 Instruções de controle

9.2.1 Execução condicional: if as declarações9.2.2 execução repetitiva: for loops, repeat e while

10 Escrevendo suas próprias funções10,1 exemplos simples10,2 definir novos operadores binários10,3 argumentos nomeados e padrões10.4 A '...' argumento10,5 atribuições dentro de funções10,6 exemplos mais avançados

10.6.1 Os factores de eficiência em blocos10.6.2 descartando todos os nomes em uma matriz impressa10.6.3 integração numérica recursiva

10,7 Âmbito10,8 Personalizando o ambiente10,9 Classes, funções genéricas e orientação a objetos

11 modelos estatísticos em R11,1 Definição de modelos estatísticos, fórmulas

11.1.1 Contrastes11,2 modelos lineares11,3 funções genéricas para extrair informações sobre o modelo11.4 Análise de variância e um modelo de comparação

11.4.1 tabelas ANOVA11,5 Atualizando modelos equipados11,6 modelos lineares generalizados

11.6.1 Famílias11.6.2 O glm() função

11,7 mínimos quadrados não-lineares e modelos de máxima verossimilhança11.7.1 Método dos mínimos quadrados11.7.2 máxima verossimilhança

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

2 de 99 25/02/2011 10:36

Page 3: r Manul Port

11,8 Alguns modelos não-standard12 procedimentos Gráfica

12,1 alto nível comandos de plotagem12.1.1 A plot() função12.1.2 Resultados de dados multivariados12.1.3 Artes gráficas12.1.4 Argumentos para alto nível de plotagem funções

12,2 baixo nível de comandos de plotagem12.2.1 anotação Matemática12.2.2 fontes Hershey vetor

12,3 Interagindo com gráficos12.4 Usando parâmetros gráficos

12.4.1 mudanças permanentes: O par() função12.4.2 mudanças temporárias: Argumentos para funções gráficas

12,5 Graphics lista de parâmetros12.5.1 Os elementos gráficos12.5.2 eixos e marcas de escala12.5.3 margens Figura12.5.4 ambiente figura múltipla

12,6 drivers de dispositivos12.6.1 diagramas PostScript para escrever documentos12.6.2 múltiplos dispositivos gráficos

12,7 gráficos dinâmicos13 Pacotes

13,1 pacotes Standard13,2 pacotes de Contribuição e CRAN13,3 Namespaces

Apêndice sessão de amostra AAApêndice B Invocando R

B.1 R Invocando a partir da linha de comandoB.2 Invocando R no WindowsB.3 Invocando R no Mac OS XB.4 Script com R

Apêndice C A linha de comando-editorPreliminares C.1Edição de ações C.2Editor de resumo de linha de comando C.3

Apêndice D Função e índice variávelApêndice E índice ConceptReferências Apêndice F

Seguinte: Prefácio , Precedente: (dir) , Up: (dir)

Uma Introdução ao R

Esta é uma introdução ao R ("GNU S"), uma linguagem e ambiente para computação estatística egráficos. R é similar ao sistema S premiada, que foi desenvolvido nos Laboratórios Bell por JohnChambers et al. Ele fornece uma ampla variedade de técnicas estatísticas e gráficas (modelagemlinear e não linear, testes estatísticos, análise de séries temporais, classificação, agrupamento, ...).

Este manual fornece informações sobre tipos de dados, elementos de programação, modelagemestatística e gráficos.

A versão atual deste documento é 2.12.1 (2010/12/16).

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

3 de 99 25/02/2011 10:36

Page 4: r Manul Port

ISBN 3-900051-12-7

PrefácioIntrodução e preliminaresSimples números manipulações e vetoresObjetosFatoresMatrizes e matrizesListas e quadros de dadosLendo dados de arquivosAs distribuições de probabilidadeLoops e execução condicionalEscrever suas próprias funçõesOs modelos estatísticos em RGráficosPacotesA sessão de exemploInvocando RA linha de comando-editore variável índice de FunçãoConceito de índiceReferências

Seguinte: Introdução e preliminares , Anterior: Top , Up: Top

Prefácio

Esta introdução para R é derivado de um original conjunto de notas que descrevam o S-PLUS eambientes S escrito em 1990-2 por Bill Venables e David M. Smith quando da Universidade deAdelaide. Fizemos uma série de pequenas alterações para refletir as diferenças entre os programasR e S, e ampliou alguns dos materiais.

Gostaríamos de agradecer sinceramente a Bill Venables (e David Smith) para a concessão depermissão para distribuir esta versão modificada das notas, desta forma, e por ser um defensor daR do caminho de volta.

Comentários e correções são sempre bem vindos. Por favor, endereço para correspondênciae-mail para [email protected] .

Sugestões para o leitor

A maioria dos novatos R começará com a sessão introdutória no Apêndice A. Isto deve daralguma familiaridade com o estilo de R sessões e mais importante feedback algum instante sobreo que realmente acontece.

Muitos usuários chegará a R principalmente para as suas instalações gráficas. Neste caso, gráficossobre as instalações de gráficos pode ser lido em quase todo o tempo e não precisa esperar atéque todas as seções anteriores foram digeridas.

Introdução e preliminares

Seguinte: manipulações simples números e vetores , Anterior: Prefácio , Up: Top

1 Introdução e preliminares

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

4 de 99 25/02/2011 10:36

Page 5: r Manul Port

O ambiente RRelated software e documentaçãoR e estatísticasR eo sistema de janelasUsando R interativamenteObter ajudaR comandos; maiúsculas e minúsculas etcRecall e correção dos comandos anterioresA execução de comandos de saída ou o desvio para um arquivoDados permanência e removendo objetos

Seguinte: software e documentação relacionada , Anterior: Introdução e preliminares , Up:Introdução e preliminares

1,1 O ambiente R

R é um conjunto integrado de recursos de software para manipulação de dados, cálculo e exibiçãográfica. Entre outras coisas, ele tem

um tratamento eficaz de dados e instalação de armazenamento,um conjunto de operadores para cálculos em matrizes, matrizes em particular,um grande conjunto coerente e integrado de ferramentas de intermediário para a análise dosdados,facilidades gráficas para análise de dados e exibir diretamente no computador ou em cópiaimpressa euma linguagem de programação bem desenvolvida, simples e eficaz (chamado `S '), queinclui condicionais, loops, funções definidas pelo usuário recursiva e facilidades de entradae saída. (Na verdade a maioria das funções do sistema fornecidos são escritos na linguagemde S).

O termo "ambiente" destina-se a caracterizá-lo como um sistema totalmente planejada e coerente,ao invés de uma acumulação gradual de ferramentas muito específicas e rígidas, como éfrequentemente o caso com outros softwares de análise de dados.

R é muito mais um veículo para desenvolver novos métodos de análise de dados interativa. Ele sedesenvolveu rapidamente, e foi prorrogado por uma grande coleção de pacotes. No entanto, amaioria dos programas escritos em R são essencialmente efêmeros, escrito por uma única peça deanálise de dados.

Seguinte: R e estatísticas , Precedente: R ambiente A , Up: Introdução e preliminares

1,2 software e documentação relacionada

R pode ser considerada como uma implementação da linguagem de S, que foi desenvolvido nosLaboratórios Bell por Rick Becker, John Chambers Wilks e Allan, e também forma a base dossistemas S-PLUS.

A evolução da linguagem é caracterizada por quatro livros por John Chambers e co-autores. PorR, a referência básica é o novo S Idioma: Um ambiente de programação para análise de dados eimagens por Richard A. Becker, M. e R. John Chambers Allan Wilks. As novas características daversão 1991 do S são abordados em Modelos Estatísticos em S editado por John Chambers M. eJ. Trevor Hastie. Os métodos formais e classes do pacote são baseados em métodos daquelesdescritos na programação com dados por John M. Chambers. Veja Referências , referênciasprecisas.

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

5 de 99 25/02/2011 10:36

Page 6: r Manul Port

Há agora uma série de livros que descrevem como usar o R para análise de dados e estatísticas edocumentação para o S / S-PLUS pode ser usado tipicamente com R, mantendo as diferenças entreas implementações S em mente. Consulte a documentação que existe para R? .

Seguinte: R eo sistema de janelas , Precedente: software e documentação relacionada , Up:Introdução e preliminares

1,3 R e estatísticas

Nossa introdução ao ambiente de R não mencionou as estatísticas, mas muitas pessoas usam Rcomo um sistema de estatísticas. Nós preferimos pensar que de um ambiente no qual muitosclássicas e modernas técnicas estatísticas têm sido implementadas. Alguns destes sãoincorporados ao ambiente R base, mas muitos são oferecidos como pacotes. Há cerca de 25pacotes fornecidos com R (chamada de "padrão" e "recomenda" pacotes) e muitos mais estãodisponíveis através da família CRAN de sites da Internet (via http://CRAN.R-project.org ) e emoutros lugares. Mais detalhes sobre os pacotes são dadas mais tarde (ver pacotes ).

A maioria das estatísticas clássicas e muito mais nova metodologia está disponível para uso comR, mas os usuários podem precisar de ser preparado para fazer um pouco de trabalho paraencontrá-lo.

Há uma importante diferença de filosofia entre S (e, portanto, R) e os outros principais sistemasestatísticos. Em uma análise estatística S é normalmente feito como uma série de etapas, comresultados intermediários sendo armazenados nos objetos. Assim, enquanto a SAS e SPSS darásaída abundante de uma análise de regressão ou discriminante, R dará saída mínima e armazenaros resultados em um objeto adequado para posterior interrogatório por funções mais R.

Próximo: Usando R interativamente , Precedente: R e estatísticas , Up: Introdução e preliminares

1,4 R eo sistema de janelas

A maneira mais conveniente de usar R está em uma estação de trabalho gráfico com um sistemade janelas. Este guia é dirigido aos usuários que têm essa facilidade. Em particular,ocasionalmente se referem ao uso de R em um sistema de janelas X, embora a grande maioria doque é dito é de aplicação geral a qualquer aplicação do ambiente R.

A maioria dos usuários acham necessário interagir diretamente com o sistema operacional em seucomputador de vez em quando. Neste guia, principalmente discutir a interação com o sistemaoperacional em máquinas UNIX. Se você estiver executando o R no Windows ou Mac OS vocêvai precisar fazer alguns pequenos ajustes.

Configurando uma estação de trabalho para tirar o máximo proveito dos recursos personalizáveisde R é um procedimento simples mas um pouco tedioso, e não será considerada mais aqui.Usuários em dificuldade deve procurar ajuda especializada local.

Seguinte: Como obter ajuda , Precedente: R eo sistema de janelas , Up: Introdução e preliminares

1.5 Usando R interativamente

Quando você usa o programa R emite um alerta quando se espera que os comandos de entrada. Oaviso padrão é ' > ', que em UNIX pode ser o mesmo que a janela de comandos, e assim podeparecer que nada está acontecendo. No entanto, como veremos, é fácil de mudar para um Rprompt diferente se desejar. Vamos supor que o shell do UNIX prompt é ' $ '.

Ao utilizar o R no UNIX o procedimento sugerido para o primeiro é o seguinte:

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

6 de 99 25/02/2011 10:36

Page 7: r Manul Port

Criar um sub-diretório separado, dizem que o trabalho, para armazenar arquivos de dadosem que você vai usar R para este problema. Este será o diretório de trabalho sempre quevocê usar R para este problema particular.

$ Mkdir work $ Cd work

1.

Inicie o programa R com o comando

R $

2.

Neste ponto R comandos podem ser emitidos (ver adiante).3.Para encerrar o programa R, o comando é

> Q ()

Neste ponto, você será perguntado se deseja salvar os dados da sua sessão R. Em algunssistemas, isso fará com que uma caixa de diálogo, e em outros que você irá receber umprompt para que você possa responder sim, não ou cancelar (uma abreviação de letravai fazer) para salvar os dados antes de sair, sair sem salvar, ou retornar para a sessão R.Dados que é salvo estará disponível em futuras sessões R.

4.

outras sessões R são simples.

Fazer o trabalho do diretório de trabalho e iniciar o programa como antes:

$ Cd work R $

1.

Use o programa R, que encerra com a q() o comando no final da sessão.2.

Para usar o R no Windows o procedimento a seguir é basicamente o mesmo. Crie uma pasta comoa pasta de trabalho, e definir que, no campo Iniciar Em seu atalho R. Em seguida, inicie Rclicando duas vezes sobre o ícone.

1,6 Uma sessão introdutória

Os leitores que quiserem ter uma idéia de R em um computador antes de prosseguir sãofortemente aconselhados a trabalhar com a sessão introdutória dada em uma sessão de amostra .

Seguinte: R comandos; maiúsculas e minúsculas etc , Anterior: Usando R interativamente , Up:Introdução e preliminares

1,7 Obter ajuda com funções e características

R tem um mecanismo de ajuda inbuilt semelhante ao man facilidade de UNIX. Para obter maisinformações sobre qualquer chamada função específica, por exemplo, solve , o comando é

> Ajuda (resolver)

Uma alternativa é

>? Resolver

Para um recurso especificado por caracteres especiais, o argumento deve ser colocado entre aspassimples ou duplas, tornando-se uma "cadeia de caracteres": Essa também é necessário paraalgumas palavras com significado sintático, incluindo if , for e function .

> Ajuda ("[[")

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

7 de 99 25/02/2011 10:36

Page 8: r Manul Port

Qualquer forma de aspas pode ser usado para escapar do outro, como na seqüência "It'simportant" . Nossa convenção é usar aspas duplas, de preferência.

Na maioria das instalações de R ajuda está disponível em formato HTML, executando

> Help.start ()

que vai lançar um navegador da Web que permite que as páginas de ajuda para serem acessadaspor hiperlinks. No UNIX, os pedidos de ajuda subseqüentes são enviadas para o sistema de ajudabaseado em HTML. O «motor e palavras-chave 'do link da pesquisa na página carregada pelohelp.start() é particularmente útil, pois é conceito contém uma lista de alto nível, que buscaainda funções disponíveis. Pode ser uma ótima maneira de se orientar rapidamente e entender aamplitude do que R tem para oferecer.

O help.search comando (em alternativa ?? ) permite procurar ajudar de várias formas. Porexemplo,

>? Resolver

Tentar ?help.search para mais detalhes e mais exemplos.

Os exemplos em um tópico de ajuda pode normalmente ser executado por

> Example (topic)

A versões Windows do R ter outros sistemas de ajuda opcionais: use

>? Ajuda

para mais detalhes.

Seguinte: Recall e correção dos comandos anteriores , Anterior: Obtendo ajuda , Up: Introdução epreliminares

1,8 comandos R, maiúsculas e minúsculas, etc

Tecnicamente R é uma linguagem de expressão com uma sintaxe muito simples. É sensível comoa maioria dos pacotes base UNIX, por isso A e a são diferentes símbolos e remete para asdiferentes variáveis. O conjunto de símbolos que podem ser usados em nomes de R depende dosistema operacional e do país em que R está sendo executado (tecnicamente na localidade em

uso). Normalmente todos os símbolos alfanuméricos são permitidos um (e em alguns países, issoinclui os caracteres acentuados) plus ' . " e ' _ ', com a restrição de que um nome deve começarcom' . ' ou uma letra, e se inicia com ' . ' o segundo personagem não deve ser um dígito. Osnomes são actualmente limitado a 256 bytes.

comandos Fundamental consistir em expressões e atribuições. Se uma expressão é dada como umcomando, ele é avaliado, impressa (salvo se tornado invisível), eo valor é perdido. A cessãotambém avalia uma expressão e passa o valor para uma variável, mas o resultado não é impressoautomaticamente.

Os comandos são separados por um ponto e vírgula (' ; '), ou por uma nova linha. comandoselementares podem ser agrupadas em uma expressão composta por chaves (' { 'e' } ').

Comentários podem ser colocados quase dois em qualquer lugar, começando com uma cancela ('# '), tudo até o fim da linha é um comentário .

Se um comando não está completa no final de uma linha, R dará um padrão diferente pronta, pormeio

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

8 de 99 25/02/2011 10:36

Page 9: r Manul Port

+

no segundo e subseqüentes linhas e continuar a ler a entrada até que o comando é sintaticamentecompleta. Esta pergunta pode ser alterada pelo usuário. Nós geralmente omitem a continuaçãopronta e indicar a continuidade de recuo simples.

As linhas de comando digitada no console são limitados 3 a cerca de 4095 bytes (caracteres não).

Próximo: Executando comandos a partir de ou desviar a saída para um arquivo , Precedente: Rcomandos; maiúsculas e minúsculas etc , Up: Introdução e preliminares

Lembre-se 1,9 e correção dos comandos anteriores

De acordo com várias versões do UNIX e Windows, R fornece um mecanismo para chamar ere-execução de comandos anteriores. As teclas de seta vertical no teclado pode ser usado pararolar para frente e para trás através de uma história de comando. Uma vez que o comando estálocalizado, desta forma, o cursor pode ser movido dentro do comando usando as teclas de setahorizontal, e os personagens podem ser removidos com a chave <DEL> ou adicionados com asoutras teclas. Mais detalhes são fornecidos mais tarde: ver a linha de comando-editor .

A capacidade de convocação e de edição em UNIX são altamente personalizáveis. Você podedescobrir como fazer isso lendo o manual de entrada para a biblioteca readline.

Como alternativa, o editor de texto Emacs fornece mecanismos de apoio mais geral (por meio deESS, Emacs Speaks Statistics) para trabalhar interativamente com R. Ver R e Emacs .

Seguinte: Dados permanência e remoção de objetos , Precedente: Recall e correção doscomandos anteriores , Up: Introdução e preliminares

1,10 executar comandos a partir de ou desviar a saída para umarquivo

Se os comandos quatro são armazenados em um arquivo externo, digamos commands.R na obradiretório de trabalho, eles podem ser executados a qualquer momento em uma sessão de R com ocomando

> Fonte ("commands.R")

Para Fonte do Windows também está disponível no menu Arquivo. A função de sink ,

> Pia ("record.lis")

irá desviar todas as saídas subseqüentes do console para um arquivo externo, record.lis. Ocomando

> Pia ()

restaura-lo para o console novamente.

Anterior: A execução de comandos de saída ou o desvio para um arquivo , Up: Introdução epreliminares

1,11 permanência de dados e objetos de remoção

As entidades que R cria e manipula são conhecidos como objetos. Estas podem ser variáveis,matrizes de números, seqüências de caracteres, funções ou estruturas mais gerais construídos a

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

9 de 99 25/02/2011 10:36

Page 10: r Manul Port

partir de tais componentes.

Durante uma sessão I, os objetos são criados e armazenados pelo nome (discutiremos esseprocesso na próxima sessão). O comando R

objetos> ()

(Alternativamente, ls() ) pode ser usado para exibir os nomes dos (a maioria) os objetos queestão atualmente armazenados no R. A coleção de objetos armazenados atualmente é chamado oespaço de trabalho. Para remover objetos da função rm está disponível:

> Rm (x, y, z, tinta, sucata, temp, foo, bar)

Todos os objetos criados durante uma sessão de R pode ser armazenado permanentemente em umarquivo para uso em futuras sessões R. No final de cada sessão R é-lhe dada a oportunidade desalvar todos os objetos disponíveis no momento. Se você indicar que você quer fazer isso, os

objetos são gravados em um arquivo chamado. Rdata 5 no diretório atual, e as linhas decomando usado na sessão são salvos em um arquivo chamado. Rhistory.

Quando R é iniciado na tarde do mesmo diretório que recarrega o espaço de trabalho a partirdeste arquivo. Ao mesmo tempo, o associado do histórico dos comandos é recarregada.

Recomenda-se que você deve usar separar diretórios de trabalho para as análises efectuadas comR. É bastante comum para objetos com nomes x e y a ser criado durante a análise. Nomes comoeste são muitas vezes significativos no contexto de uma única análise, mas pode ser bastantedifícil decidir o que pode ser quando as análises foram conduzidas várias no mesmo diretório.

Seguinte: Objetos , Anterior: Introdução e preliminares , Up: Top

Duas manipulações simples, números e vetores

Vetores e atribuiçãoaritmética Vectorregular gerar seqüênciasLógico vetoresOs valores em faltaPersonagem vetoresÍndice de vetoresOutros tipos de objetos

Seguinte: Vector aritmética , anterior: Simple números manipulações e vetores , Up: Simplenúmeros manipulações e vetores

2,1 Vetores e atribuição

R opera sobre estruturas de dados nomeado. A estrutura mais simples como é o vetor numérico,que é uma entidade única, que consiste em uma coleção ordenada de números. Para configurarum vetor denominado x , digamos, consistindo de cinco números, ou seja, 10,4, 5,6, 3,1, 6,4 e21,7, use o comando R

> X <- c (10,4, 5,6, 3,1, 6,4, 21,7)

Esta é uma declaração de atribuição usando a função c() que, neste contexto pode ter umnúmero arbitrário de argumentos de vetor e cujo valor é um vetor tem concatenando seus

argumentos finais até ao fim. 6

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

10 de 99 25/02/2011 10:36

Page 11: r Manul Port

Um número que ocorre por si só, em uma expressão é tida como um vetor de comprimento um.

Observe que o operador de atribuição (' <- '), que consiste de dois personagens do < "(" menorque ") e" - "(" menos ") que ocorrem estritamente lado a lado e` pontos 'para o objeto que recebeo valor da expressão. Na maioria dos contextos, a ' = operador pode ser usado como umaalternativa. Atribuição também pode ser feita usando a função assign() . Uma maneiraequivalente de fazer a mesma tarefa como acima está com:

> Assign ("x", c (10,4, 5,6, 3,1, 6,4, 21,7))

O operador de costume, <- , pode ser pensado como um sintática atalho para isso.

Atribuições também pode ser feita em outra direção, usando a evidente mudança de operador deatribuição. Assim, a mesma atribuição pode ser feita usando

> C (10,4, 5,6, 3,1, 6,4, 21,7) -> x

Se uma expressão é usada como um comando completo, o valor é impresso e perdeu 7 . Então,agora, se tivéssemos que usar o comando

> 1 / x

os inversos dos cinco valores seriam impressas no terminal (eo valor de x , é claro, permaneceinalterado).

A tarefa ainda mais

<> Y - c (x, 0, x)

criaria um vetor y com 11 entradas composto de duas cópias de x com um zero no lugar do meio.

Seguinte: regular gerar seqüências , Precedente: Vetores e atribuição , Up: Simple númerosmanipulações e vetores

2,2 aritmética Vector

Vetores podem ser usados em expressões aritméticas, caso em que as operações são realizadaselemento por elemento. Vetores ocorrendo na mesma expressão não precisam ser todos do mesmocomprimento. Se não forem, o valor da expressão é um vetor com o mesmo comprimento que omaior vetor, que ocorre na expressão. vetores mais curtos na expressão são recicladas quantasvezes necessário (talvez fracionada), até que elas coincidam com o comprimento do maior vetor.Em especial, uma constante é simplesmente repetido. Assim, com as atribuições acima docomando

V <> - 2 * x + y + 1

gera um novo vetor v de comprimento 11 construído pela soma, elemento por elemento, 2*x 2,2repetidas vezes, y repetida apenas uma vez, e 1 repetido 11 vezes.

Os operadores aritméticos elementares são os habituais + , - , * , / e ^ para elevar a umapotência. Além de todas as funções aritméticas comuns estão disponíveis. log , exp , sin , cos ,tan , sqrt , e assim por diante, todos têm seu significado usual. max e min e selecionar o menoreo maior elementos de um vetor, respectivamente. range é uma função cujo valor é um vetor decomprimento dois, isto é, c(min(x), max(x)) . length(x) é o número de elementos em x ,sum(x) dá o total dos elementos em x , e prod(x) o seu produto. Duas funções estatísticas sãomean(x) que calcula a média da amostra, que é a mesma sum(x)/length(x) , e var(x) que dá

sum ((x-média (x)) ^ 2) / (comprimento (x) -1)

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

11 de 99 25/02/2011 10:36

Page 12: r Manul Port

ou variância da amostra. Se o argumento para var() é um n-por-p-valor da matriz é um sub-p-pcovariância da amostra tem por matriz a respeito das linhas como independente variada amostrade vetores-p.

sort(x) retorna um vetor do mesmo tamanho de x com os elementos dispostos em ordemcrescente, porém existem outras instalações de classificação mais flexível disponível (veja aorder() ou sort.list() que produzem uma permutação para fazer a classificação) . Note-seque max e min e selecionar o menor eo maior valores em seus argumentos, mesmo se eles tiveremvários vetores. O valor máximo e mínimo de funções paralelas pmax e pmin retornar um vetor (decomprimento igual ao seu maior argumento) que contém em cada elemento o maior eo menor)elemento (em que a posição em qualquer um dos vetores de entrada. Para a maioria dos efeitosque o usuário não se preocupa se os "números" em um vetor numérico são inteiros, reais oumesmo complexos. Internamente, os cálculos são feitos com precisão dupla números reais ounúmeros de precisão dupla complexo se os dados de entrada são complexas.

Para trabalhar com números complexos, fonte de uma parte explícita complexo. Assim

sqrt (-17)

dará NaN e uma advertência, mas

sqrt (-17 0 i)

fará os cálculos de números complexos.

regular gerar seqüências

Seguinte: vetores lógicos , Precedente: aritmética Vector , Up: manipulações simples números evetores

Geração de 2,3 seqüências regulares

R tem um número de instalações para a geração de seqüências comumente utilizado de números.Por exemplo 1:30 é o vetor c(1, 2, ..., 29, 30) . O operador dois pontos tem altaprioridade dentro de uma expressão, por isso, por exemplo 2*1:15 é o vetor c(2, 4, ..., 28,30) . Coloque n <- 10 e comparar as seqüências 1:n-1 e 1:(n-1) .

A construção 30:1 pode ser usado para gerar uma seqüência para trás.

A função seq() é um mecanismo mais geral para a geração de seqüências. Ela tem cincoargumentos, só algumas das quais podem ser especificados em qualquer uma chamada. Osprimeiros dois argumentos, se houver, especificar o início eo fim da seqüência, e se estes são osdois únicos argumentos que apresenta o resultado é o mesmo que o operador dois pontos. Isso éseq(2,10) é o mesmo vetor como 2:10 .

Parâmetros para seq() , e para muitas funções R outro, também pode ser dada em forma denome, caso em que a ordem em que aparecem é irrelevante. Os primeiros dois parâmetros podeser chamado from= valor e to= valor; assim seq(1,30) , seq(from=1, to=30) e seq(to=30,from=1) são todos iguais como 1:30 . Os próximos dois parâmetros para seq() pode serchamado by= valor e length= valor, que especifica um tamanho de passo e um comprimentopara a seqüência respectivamente. Se nenhum desses for dada, o padrão by=1 é assumido.

Por exemplo

> Seq (-5, 5, por =. 2) -> s3

gera em s3 o vetor c(-5.0, -4.8, -4.6, ..., 4.6, 4.8, 5.0) . Do mesmo modo

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

12 de 99 25/02/2011 10:36

Page 13: r Manul Port

> S4 <- seq (length = 51, a partir =- 5, por =. 2)

gera o mesmo vetor em s4 .

O quinto parâmetro pode ser nomeado along= vetor, que se for utilizado deve ser o únicoparâmetro, e cria uma seqüência de 1, 2, ..., length( vetor ) , ou a seqüência vazia se ovetor está vazia (como pode ser ).

A função está relacionada rep() que pode ser usado para replicar um objeto de diversas maneirascomplicadas. A forma mais simples é

> <S5 - rep (x, vezes = 5)

que vai colocar cinco cópias de x fim-de-final em s5 . Outra versão é útil

<> S6 - rep (x, cada = 5)

que se repete cada elemento x cinco vezes antes de avançar para a próxima.

Seguinte: Os valores em falta , Precedente: regular gerar seqüências , Up: Simple númerosmanipulações e vetores

2,4 vetores lógicos

Bem como vetores numéricos, R permite a manipulação de quantidades de lógica. Os elementosde um vetor lógico pode ter os valores TRUE , FALSE , e NA (para "não disponível", veja abaixo).Os dois primeiros são abreviadas como T e F , respectivamente. Note no entanto que T e F sãoapenas as variáveis que são definidas para TRUE e FALSE , por padrão, mas não são palavrasreservadas e, portanto, pode ser substituído pelo usuário. Portanto, você deve sempre usar TRUE eFALSE . Lógico vetores são gerados por condições. Por exemplo

<Temp> - x> 13

define temp como um vetor de mesmo comprimento que x , com valores FALSE correspondentesaos elementos de x em que a condição não for cumprida e TRUE onde ela está.

Os operadores lógicos são < , <= , > , >= , == para a igualdade exata e != para a desigualdade.Além disso, se c1 e c2 são expressões lógicas, em seguida, c1 & c2 é a intersecção ("e"), c1 | c2é a sua união ("ou"), e !c1 é a negação de c1 . Lógico vetores podem ser usados na aritméticacomum, caso em que são coagidos a vetores numéricos, FALSE se tornando 0 e TRUE se tornar 1 .No entanto, existem situações onde os vetores lógicos e seus homólogos coagido numéricos nãosão equivalentes, por exemplo, veja na próxima subseção.

Próxima: Personagem vetores , Precedente: vetores lógicos , Up: manipulações simples números evetores

2,5 valores em falta

Em alguns casos, os componentes de um vetor não pode ser completamente conhecida. Quandoum elemento ou o valor é "não disponível" ou um "valor faltando" no sentido estatístico, um lugardentro de um vetor pode ser reservado para ela, atribuindo a ela o valor especial NA . Em geral,qualquer operação realizada sobre um NA torna-se um NA . A motivação para esta regra ésimplesmente que se a especificação de uma operação é incompleta, o resultado não pode serconhecido e, portanto, não está disponível.

A função is.na(x) dá um vetor lógico do mesmo tamanho de x com o valor TRUE se e somentese o elemento correspondente em x é NA .

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

13 de 99 25/02/2011 10:36

Page 14: r Manul Port

> Z <- c (1:3, NA); <ind - is.na (z)

Observe que a expressão lógica x == NA é muito diferente de is.na(x) desde NA não érealmente um valor, mas um marcador para uma quantidade que não está disponível. Assim x ==NA é um vetor de mesmo comprimento que x todos cujos valores são NA , como a expressão lógicaem si é incompleta e, portanto, indecidível.

Note que existe um segundo tipo de "desaparecidos" os valores que são produzidos porcomputação numérica, a chamada Not a Number, NaN , valores. Exemplos são

> 0 / 0

ou

> Inf - Inf

que ambos dão NaN desde que o resultado não pode ser definido de forma sensata.

Em resumo, is.na(xx) é TRUE tanto para NA e NaN valores. Para diferenciá-las, is.nan(xx) só éTRUE para NaN s. Os valores em falta são, às vezes impresso como <NA> vetores de caracteresquando são impressas sem aspas.

Seguinte: Índice de vetores , Anterior: Os valores em falta , Up: Simple números manipulações evetores

2,6 Personagem vetores

Personagem quantidades e vetores de caracteres são utilizados freqüentemente em R, porexemplo, etiquetas parcela. Sempre que necessário, eles são indicados por uma seqüência decaracteres delimitados pelo caractere aspas duplas, por exemplo, "x-values" , "New iterationresults" .

As cadeias de caracteres são digitados ou correspondência (double " ) ou simples ( ' ) aspas, massão impressos usando aspas duplas (ou às vezes sem as aspas). Eles usam seqüências de escapeestilo-C, usando \ como caracter de escape, assim \\ é entrou e impressos como \\ , e dentro deaspas duplas " está inscrita como \" . Outras seqüências de escape são úteis \n nova linha, \t ,guia e \b , backspace-ver? Cotações para uma lista completa.

Personagem vetores podem ser concatenados em um vetor pelo c() função, exemplos de uso vãosurgir com frequência. O paste() função recebe um número arbitrário de argumentos econcatena-los um a um em cadeias de caracteres. Qualquer número, dado entre os argumentossão coagidos a cadeias de caracteres no modo evidente, isto é, da mesma forma que seriam sefossem impressas. Os argumentos são separados por padrão no resultado por um único caractereem branco, mas isso pode ser alterado pelo parâmetro nomeado, sep= string, o que muda é acadeia, possivelmente vazio.

Por exemplo

> <Laboratórios - pasta (c ("X", "Y"), 1:10, setembro = "")

faz labs para o vetor de caracteres

c ("X1", "Y2", "X3", "Y4", "X5", "Y6", "X7", "Y8", "X9", "Y10")

Note particularmente que a reciclagem de listas curtas acontece aqui também, assim c("X",

"Y") é repetido cinco vezes para igualar a seqüência de 1:10 . 8

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

14 de 99 25/02/2011 10:36

Page 15: r Manul Port

Seguinte: Outros tipos de objetos , anterior: Personagem vetores , Up: manipulações simplesnúmeros e vetores

Índice de 2,7 vetores; seleção e modificação de subconjuntos de umconjunto de dados

Subconjuntos de elementos de um vetor pode ser selecionado por meio do acréscimo do nome dovetor um vetor de índice entre colchetes. Mais geral, qualquer expressão que equivale a um vetorpode ter subconjuntos dos seus elementos igualmente selecionadas anexando um vetor de índiceentre colchetes imediatamente após a expressão.

vetores Esse índice pode ser qualquer um dos quatro tipos distintos.

Um vetor lógico. Neste caso, o índice do vetor deve ser do mesmo comprimento que ovetor a partir da qual os elementos devem ser selecionados. Valores correspondentes a TRUEno vetor de índice são selecionados e os correspondentes à FALSE são omitidos. Porexemplo

<> Y - x [! Is.na (x)]

cria (ou recria) um objeto y que conterá os valores em falta, não de x , na mesma ordem do.Note que se x tem valores em falta, y será menor que x . Também

> (X +1) [(! Is.na (x)) & x> 0] -> z

cria um objeto z e lugares em que os valores do vetor x+1 para o qual o valorcorrespondente em x era ao mesmo tempo não falta e positiva.

1.

Um vetor de quantidades positivas integral. Neste caso, os valores no vetor de índicedeve estar no conjunto {1, 2, ..., length(x) }. Os elementos correspondentes do vetor sãoselecionadas e concatenadas, nessa ordem, no resultado. O vetor de índice pode ser dequalquer tamanho, eo resultado é do mesmo comprimento que o vetor de índice. Porexemplo, x[6] é o sexto componente de x e

> X [01:10]

seleciona os 10 primeiros elementos de x (assumindo que length(x) não é inferior a 10).Também

> C ("x", "y") [rep (c (1,2,2,1), os tempos = 4)]

(Uma coisa improvável certo a fazer) produz um vetor de caracteres de tamanho 16 queconsiste em "x", "y", "y", "x" repetido quatro vezes.

2.

Um vetor de quantidades negativas integral. Esse índice vetor uma especifica os valoresa serem excluídos e não incluídos. Assim

<> Y - x [- (1:5)]

dá y todos, mas os cinco primeiros elementos de x .

3.

Um vetor de seqüências de caracteres. Esta possibilidade só se aplica quando um objetotem um names de atributo para identificar seus componentes. Neste caso, um sub-vetor dovetor de nomes podem ser utilizados da mesma forma como os rótulos positivos integral noitem 2 mais acima.

<> Fruta - c (5, 10, 1, 20) > Nomes (fruta) <- c ("laranja", "banana", "maçã", "pêssego") > <Almoço - [c ("maçã", "laranja")] frutas

4.

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

15 de 99 25/02/2011 10:36

Page 16: r Manul Port

A vantagem é que os nomes alfanuméricos são muitas vezes mais fácil de lembrar que osíndices numéricos. Esta opção é particularmente útil em conexão com os quadros de dados,como veremos mais tarde.

Uma expressão indexada também pode aparecer no fim de recepção de uma cessão, caso em quea operação de atribuição é realizada apenas sobre os elementos do vetor. A expressão deve ser daforma vector[ index_vector ] como tendo uma expressão arbitrária no lugar do nome do vetornão faz muito sentido aqui.

O vetor atribuído deve corresponder ao tamanho do vetor de índice, e no caso de um vetor deíndice lógico que deve voltar a ser o mesmo comprimento que o vetor é a indexação.

Por exemplo

> X [is.na (x)] <- 0

substitui os valores em falta em x por zeros e

> Y [y <0] <--y [y <0]

tem o mesmo efeito que

> Y <- abs (y)

Anterior: Índice de vetores , Up: Simple números manipulações e vetores

2,8 Outros tipos de objetos

Vetores são o tipo mais importante do objeto em R, mas existem muitas outras, que vamosencontrar mais formalmente nas seções posteriores.

matrizes ou, mais geralmente arrays são multi-dimensional de vetores de generalizações.Na verdade, eles são vetores que podem ser indexados por dois ou mais índices e seráimpresso de maneira especial. Veja matrizes e matrizes .fatores fornecem maneiras compacto para manipular os dados categóricos. Veja Fatores .listas são uma forma geral de vetor no qual os vários elementos não precisam ser do mesmotipo, e muitas vezes são eles mesmos vetores ou listas. As listas oferecem um modoconveniente para retornar os resultados de um cálculo estatístico. Veja listas .quadros de dados são, como as estruturas da matriz, na qual as colunas podem ser dediferentes tipos. Pense de quadros de dados como matrizes «dados» com uma linha porunidade de observação, mas com (possivelmente) as duas variáveis numéricas ecategóricas. Muitas experiências são mais bem descrito por quadros de dados: ostratamentos são categóricos, mas a resposta é numérica. Veja quadros de dados .funções são objetos em R que pode ser armazenado em espaço de trabalho do projeto. Issofornece uma maneira simples e conveniente para estender R. Veja escrever suas própriasfunções .

Seguinte: Fatores , Precedente: números de simples manipulações e vetores , Up: Top

3 Objetos, seus modos e atributos

O modo de atributos intrínsecos e comprimentoA mudança no comprimento de um objetoObter e definir atributosA classe de um objeto

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

16 de 99 25/02/2011 10:36

Page 17: r Manul Port

Seguinte: A mudança no comprimento de um objeto , Precedente: Objetos , Up: Objetos

3,1 atributos intrínsecos: modo e tempo

As entidades R opera em são tecnicamente conhecidos como objetos. Exemplos são os vetores devalores numéricos (real) ou complexos, vetores de valores lógicos e vectores de cadeias decaracteres. Estes são conhecidos como "atômico" estruturas desde os seus componentes são todos

do mesmo tipo, ou modo, ou seja, numérica 9 , complexo, natureza, lógica e matérias-primas.

Vetores devem ter seus valores todos do mesmo modo. Assim, qualquer dado vetor deve serinequívoca, quer lógico, numérico, de caráter complexo, ou cru. (A aparente única excepção aesta regra é a "especial" o valor listado como NA para as quantidades não estão disponíveis, masna verdade existem vários tipos de NA ). Note-se que um vetor pode ser vazio e ainda ter ummodo. Por exemplo, a seqüência de vetores de caracteres vazia é listada como character(0) eovetor numérica vazia como numeric(0) .

R também opera em objetos listas de chamada, que são de modo lista. Estas são seqüênciasordenadas de objetos que, individualmente, pode ser de qualquer modo. Listas são conhecidascomo "recursivo" ao invés de estruturas atômicas desde que seus componentes possam ser elespróprios listas em seu próprio direito.

O recursiva outras estruturas são os de função do modo de expressão. As funções são os objetosque fazem parte do sistema R junto com o usuário similar funções escritas, que serão discutidosem detalhe mais tarde. Expressões como objetos fazem parte avançada de R que não serãodiscutidos neste guia, exceto indiretamente quando discutimos fórmulas usadas com modelagemem R.

Pelo modo de um objeto que significa que o tipo básico de seus componentes fundamentais. Esteé um caso especial de uma "propriedade" de um objeto. Outra propriedade de cada objeto é o seucomprimento. As funções mode( objeto ) e length( objeto ) pode ser usada para descobrir o

modo e tempo de qualquer estrutura definida 10 .

Outras propriedades de um objeto são normalmente prestados por attributes( objeto ) ,consulte Como obter e definir atributos . Devido a isso, o modo e tempo são também chamados de"atributos intrínsecos" de um objeto. Por exemplo, se z é um vetor complexo de comprimento100, então em uma expressão mode(z) é a seqüência de caracteres "complex" e length(z) é100 .

R serve para mudanças de modo quase em qualquer lugar que poderia ser considerado razoávelpara o fazer, (e algumas em que não possa ser). Por exemplo, com

> Z <- 00:09

poderíamos colocar

dígitos> <- as.character (z)

após o qual digits é o vetor de caracteres c("0", "1", "2", ..., "9") . A coerção mais oumudança de modo, reconstrói o vetor numérico novamente:

> D <- as.integer (dígitos)

Agora d e z são os mesmos. 11 Existe uma grande coleção de funções da forma as. algo () paraqualquer coerção de um modo para outro, ou para investir um objeto com algum outro atributoque não pode já possuir. O leitor deve consultar os arquivos de ajuda diferentes para sefamiliarizar com eles.

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

17 de 99 25/02/2011 10:36

Page 18: r Manul Port

Seguinte: Como obter e definir atributos , Anterior: O modo de atributos intrínsecos ecomprimento , Up: Objetos

3.2 Alterando o comprimento de um objeto

Um objeto "vazio" pode ainda ter um modo. Por exemplo

> E <- numérico ()

faz e uma estrutura de vetor vazio de modo numérico. Do mesmo modo character() é um vetorde caracteres vazia, e assim por diante. Depois que um objeto de qualquer tamanho, foi criado,novos componentes podem ser adicionados a ele, simplesmente, dando-lhe um valor de índicefora do intervalo anterior. Assim

> E [3] <- 17

faz agora e um vetor de comprimento 3, (os dois primeiros componentes, que são neste momentoos dois NA ). Isso se aplica a qualquer estrutura de todos, desde o modo do componente adicional(s) concorda com o modo do objeto em primeiro lugar.

Este ajuste automático do comprimento de um objeto é usado com freqüência, por exemplo, noscan() função para a entrada. (Veja o scan () função .)

Inversamente para truncar o tamanho de um objeto requer apenas uma atribuição para fazê-lo.Portanto, se alpha é um objeto de comprimento 10,

> <- Alfa alfa [2 * 01:05]

torna um objeto de comprimento 5 que compreende apenas os componentes antigos, mesmo como índice. (Os índices de idade não são mantidas, é claro.) Podemos então manter apenas os trêsprimeiros valores,

> Comprimento (alfa) <- 3

e vetores pode ser estendido (por valores em falta), da mesma forma.

Seguinte: A classe de um objeto , Anterior: Mudando o comprimento de um objeto , Up: Objetos

3,3 obter e definir atributos

A função de attributes( objeto ) retorna uma lista de todos os não-atributos intrínsecosatualmente definidas para esse objeto. A função attr( objeto , nome ) pode ser usado paraselecionar um atributo específico. Essas funções são raramente utilizadas, exceto emcircunstâncias muito especial quando algum novo atributo está sendo criado para algum propósitoparticular, por exemplo, para associar a criação de uma data ou um operador com um objeto R. Oconceito, entretanto, é muito importante.

Alguns cuidados devem ser tomados quando atribuir ou excluir atributos pois eles são uma parteintegrante do sistema de objetos usados em R.

Quando ele é usado no lado esquerdo de uma atribuição que pode ser usado para associar umnovo atributo com o objeto ou alterar um já existente. Por exemplo

> Attr (z, "dim") <- c (10,10)

R permite tratar z , como se fosse um-por-10 da matriz 10.

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

18 de 99 25/02/2011 10:36

Page 19: r Manul Port

Anterior: Introdução e definição de atributos Up:, Objetos

3,4 A classe de um objeto

Todos os objetos em P tem uma classe, relatado pela função de class . Para vetores simples, esteé apenas o modo, por exemplo "numeric" , "logical" , "character" ou "list" , mas"matrix" , "array" , "factor" e "data.frame" são outros valores possíveis.

Um atributo especial, conhecida como a classe do objeto é usado para permitir um estilo de

objeto orientado 12 de programação em R. Por exemplo, se um objeto tem classe "data.frame" ,ele será impresso em uma determinada maneira, a plot() função irá exibi-lo graficamente emuma determinada maneira, e outros chamados funções genéricas como o summary() vai reagir aisso como um argumento de uma forma sensível a sua classe.

Para remover temporariamente os efeitos da classe, use a função unclass() . Por exemplo, sewinter tem a classe "data.frame" , em seguida,

Inverno>

será impresso em formulário de dados do quadro, que é um pouco como uma matriz, enquanto

unclass> (Inverno)

irá imprimi-lo como uma lista comum. Somente em situações especiais, em vez que você precisapara usar este recurso, mas é quando você está aprendendo a entrar em acordo com a idéia declasse e funções genéricas.

funções genéricas e as aulas serão discutidas mais adiante na orientação a objeto , mas apenasmomentaneamente.

Seguinte: matrizes e matrizes , Precedente: Objetos , Up: Top

4 fatores ordenadas e desordenadas

Um fator é um vetor de objeto usado para especificar uma classificação discreta (agrupamento)dos componentes de outros vetores de mesmo comprimento. R fornece tanto desordenada efatores de ordem. Enquanto o real "aplicação" de fatores é com as fórmulas do modelo (verContrastes ), nós aqui olhar para um exemplo específico.

4,1 Um exemplo específico

Suponha, por exemplo, temos uma amostra de 30 auditores fiscais de todos os estados e territórios

da Austrália 13 e seu estado de origem individual é especificado por um vetor de caracteres demnemônicos Estado como

<> Estado - c ("tas", "sa", "qld", "NSW", "NSW", "NT", "wa", "wa", "Qld", "Vic", "NSW", "Vic", "qld", "qld", "sa", "tas", "Sa", "NT", "wa", "Vic", "qld", "NSW", "NSW", "wa", "Sa", "acto", "NSW", "Vic", "Vic", "acto")

Observe que no caso de um vetor de caracteres ", classificado" significa classificados em ordemalfabética.

Um fator é igualmente criado usando o factor() função:

> <Statef - factor (estado)

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

19 de 99 25/02/2011 10:36

Page 20: r Manul Port

O print() função manipula fatores um pouco diferente de outros objetos:

statef> [1] sa tas qld nsw nsw wa wa nt qld vic vic nsw qld qld sa [16] tas sa nt wa vic qld nsw nsw wa nsw ato sa ato Vic Níveis: nt nsw ato qld tas sa wa vic

Para descobrir os níveis de um fator a função de levels() pode ser usado.

> Níveis (statef) [1] "acto", "nsw" nt "qld" sa "" tas "vic" wa "

O Tapply função () e matrizes irregularesfatores ordenada

Seguinte: fatores ordenada , Precedente: Fatores , Up: Fatores

4.2 A função tapply() e matrizes irregulares

Para continuar o exemplo anterior, suponha que temos os rendimentos dos auditores fiscais numoutro vector (em unidades suficientemente grande de dinheiro)

<> Renda - c (60, 49, 40, 61, 64, 60, 59, 54, 62, 69, 70, 42, 56, 61, 61, 61, 58, 51, 48, 65, 49, 49, 41, 48, 52, 46, 59, 46, 58, 43)

Para calcular a média da amostra de renda para cada estado agora podemos usar a funçãoespecial tapply() :

> Incmeans <- Tapply (rendas, statef, média)

dando um vetor de meios com os componentes marcados pelos níveis

ato sa nt nsw qld tas wa vic 44,500 57,333 55,500 53,600 55,000 60,500 56,000 52,250

A função tapply() é usada para aplicar uma função, aqui mean() , para cada grupo decomponentes do primeiro argumento, aqui incomes , definidos pelos níveis do segundo

componente, aqui statef 14 , como se fossem as estruturas do vetor separados . O resultado éuma estrutura do mesmo comprimento que os níveis de atributo do elemento que contém osresultados. O leitor deve consultar o documento de ajuda para mais detalhes.

Suponha ainda que precisávamos para calcular o desvio padrão da renda do estado significa. Paraisso, precisamos escrever uma função de R para calcular o erro padrão para qualquer vector dado.Como não há uma função embutida var() para calcular a variância da amostra, tal função émuito simples de uma linha, indicada pelo serviço:

> <Stderr - function (x) sqrt (var (x) / comprimento (x))

(Funções de escrita será considerada mais tarde, em escrever suas próprias funções , e neste casoera desnecessária, visto que R tem também uma função embutida sd() ). Depois desta atribuição,os erros-padrão são calculados por

<Incster> - Tapply (rendas, statef stderr)

e os valores calculados são então

incster> ato sa nt nsw qld tas wa vic 1,5 4,3102 4,5 4,1061 2,7386 0,5 5,244 2,6575

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

20 de 99 25/02/2011 10:36

Page 21: r Manul Port

Como um exercício, você pode importar para encontrar os habituais limites de confiança de 95%para a média no estado de rendimentos. Para fazer isso você poderia usar tapply() mais uma vezcom o length() função para localizar os tamanhos de amostra e do qt() função para localizar ospontos de percentagem do adequado t-distribuições. (Você também pode investigar instalações deP para os testes-t).

A função tapply() também pode ser usado para tratar mais complicado indexação de um vetorpor várias categorias. Por exemplo, poderíamos querer dividir os contabilistas fiscais por estado esexo. No entanto, neste caso, simples (apenas um fator) que acontece pode ser pensado como sesegue. Os valores do vetor são coletados em grupos, correspondentes às entradas distintas nofator. A função é aplicada a cada um desses grupos individualmente. O valor é um vetor deresultados da função, marcado pela levels atributo do fator.

A combinação de um vetor e um fator de rotulagem é um exemplo de que às vezes é chamada dematriz irregular, uma vez que os tamanhos das subclasses são possivelmente irregular. Quando ostamanhos das subclasses são todos os indexação o mesmo pode ser feito de modo implícito emuito mais eficiente, como podemos ver na próxima seção.

Anterior: A função Tapply () e matrizes irregulares , Up: Fatores

4,3 fatores ordenada

Os níveis dos fatores são armazenados em ordem alfabética, ou na ordem em que foramespecificados para factor se eles fossem especificados explicitamente.

Às vezes os níveis terão uma ordem natural que queremos gravar e queremos que a nossa análiseestatística para fazer uso. O ordered() função cria tais fatores ordenados mas de resto é idênticoao factor . Para a maioria dos efeitos que a única diferença entre os fatores de ordenados e nãoordenados é que os primeiros são impressos mostrando a ordem dos níveis, mas o contrastegerado por eles no ajuste de modelos lineares são diferentes.

Seguinte: Listas e quadros de dados , Precedente: Fatores , Up: Top

5 matrizes e matrizes

Matrizesindexação de matrizÍndice de matrizesA função Array ()O produto externo das duas matrizesGeneralizado transposição de uma matrizFacilidades MatrixFormando matrizes particionadasA função de concatenação c () com arraystabelas de freqüência de fatores

Em seguida: Matriz de indexação , Precedente: matrizes e matrizes , Up: matrizes e matrizes

5,1 Arrays

Uma matriz pode ser considerada como uma coleção multiplicar subscrita de entradas de dados,por exemplo numérico. R permite instalações simples para a criação e manipulação de matrizes, eem particular o caso especial de matrizes.

A dimensão do vetor é um vetor de inteiros não-negativos. Se o seu comprimento é k, então a

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

21 de 99 25/02/2011 10:36

Page 22: r Manul Port

matriz é k-dimensional, por exemplo, uma matriz é um array de 2 dimensões. As dimensões sãoindexados a partir de um até os valores indicados no vetor de dimensão.

Um vetor pode ser usado por R como uma matriz somente se ele tiver um vetor de dimensãocomo o seu atributo dim. Suponha, por exemplo, z é um vetor de 1500 elementos. A atribuição

> Dim (z) <- c (3,5,100)

lhe confere o atributo dim que permite que ele seja tratado como um "3 by 5 por 100 matriz.

Outras funções, tais como matrix() e array() estão disponíveis para simples e mais naturalatribuições de quem, como veremos em A matriz () função .

Os valores no vetor de dados fornecem os valores da matriz na mesma ordem em que iria ocorrerem Fortran, que é "grande encomenda de coluna", com o primeiro subscrito mais rápidos e maislentos subscrito passado.

Por exemplo, se o vetor de dimensão para uma matriz, diz a , é c(3,4,2) , então há 3 * 4 * 2 =24 entradas em a vetor de dados e os mantém na ordem a[1,1,1], a[2,1,1], ...,a[2,4,2], a[3,4,2] .

Matrizes podem ser unidimensionais: matrizes deste tipo são normalmente tratados da mesmaforma como vetores (incluindo a imprimir), mas as exceções podem causar confusão.

Seguinte: Índice de matrizes , Anterior: Matrizes , Up: matrizes e matrizes

5,2 a indexação de matriz. Subseções de uma matriz

Os elementos individuais de uma matriz pode ser referenciado por dar o nome da matriz seguidopelos subscritos entre colchetes, separados por vírgulas.

Mais genericamente, as subseções de uma matriz pode ser especificado, dando uma seqüência devetores de índice, em substituição de índices, no entanto, se qualquer posição do índice é dadoum vetor de índice de vazios, em seguida, toda a gama de subscrição que for tomada.

Continuando o exemplo anterior, a[2,,] é um 4 * 2 matriz com a dimensão do vetor c(4,2) eovetor de dados contendo os valores

c (a [2,1,1], a [2,2,1], a [2,3,1], a [2,4,1], um [2,1,2], a [2,2,2], a [2,3,2], a [2,4,2])

nessa ordem. a[,,] representa a matriz inteira, que é o mesmo que omitir a totalmente subscritose usar a só.

Para qualquer matriz, digamos Z , o vetor de dimensão pode ser referenciado explicitamente comodim(Z) (em ambos os lados de uma atribuição).

Além disso, se um nome de matriz é dado com apenas um índice ou um vetor de índice, emseguida, os valores correspondentes do vetor de dados só são utilizadas, neste caso o vetor dedimensão é ignorada. Este não é o caso, no entanto, se o único índice não é um vetor, mastambém uma matriz, como estamos proximos discutir.

Índice de matrizesA função Array ()

Seguinte: A função Array () , anterior: a indexação de matriz , Up: matrizes e matrizes

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

22 de 99 25/02/2011 10:36

Page 23: r Manul Port

5,3 matrizes Índice

Bem como um vetor de índice em qualquer posição subscrito, uma matriz pode ser usada com umúnico índice da matriz seja para atribuir um vetor de quantidades para uma coleção irregular deelementos do array, ou extrair uma coleção irregular como um vetor.

Um exemplo da matriz torna o processo claro. No caso de uma matriz duplamente indexados, umíndice da matriz pode ser dada constituído por duas colunas e tantas linhas, como desejado. Asentradas no índice da matriz são os índices de linha e coluna para a matriz duplamente indexados.Suponha, por exemplo, temos uma matriz de 4 por 5 X e queremos fazer o seguinte:

Extrair elementos X[1,3] , X[2,2] e X[3,1] como uma estrutura de vetor, eSubstituir essas entradas na matriz X por zeros.

Neste caso, precisamos de uma matriz de 3 por 2 subscrito, como no exemplo a seguir.

> X <- matriz (1:20, c = dim (4,5)) # Gera uma matriz de 4 por 5. > X , [1], [2], [3], [4], [5] [1], 1 5 9 13 17 [2] 2 6 10 14 18 [3], 3 7 11 15 19 [4], 4 8 12 16 20 > I <- matriz (c (1:3,3:1), c = dim (3,2))

> I # i é uma matriz 3 por 2 índice. , [1], [2] [1], 1 3 [2], 2 2 [3], 3 1

> X [i] # Extrai os elementos [1] 9 6 3

> X [i] <- 0 # Substitua esses elementos zeros. > X , [1], [2], [3], [4], [5] [1], 1 5 0 13 17 [2], 2 0 10 14 18 [3], 0 7 11 15 19 [4], 4 8 12 16 20 >

Os índices negativos não são permitidos em matrizes índice. NA e valores de zero são permitidos:linhas no índice de matriz contendo um zero são ignoradas, e as linhas que contêm um NA produzirum NA no resultado.

Como um exemplo menos trivial, suponha que queiramos gerar uma situação sem redução)projeto (matriz para um delineamento em blocos definidos por fatores blocks ( b níveis) evarieties ( v níveis). Suponha ainda existem n parcelas no experimento. Nós poderíamosproceder da seguinte forma:

> Xb <- matriz (0, n, b) > Xv <- matriz (0, n, v) > <Ib - cbind (1: n, blocos) <> IV - cbind (1: n, variedades) > Xb [ib] <- 1 > XV [iv] <- 1 > X <- cbind (Xb, XV)

Para construir a matriz de incidência, N dizer, nós poderíamos usar

> N <- crossprod (Xb, XV)

No entanto, uma maneira mais simples direta de produzir essa matriz é a utilização de table() :

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

23 de 99 25/02/2011 10:36

Page 24: r Manul Port

> N <- tabela (blocos, variedades)

Índice de matrizes deve ser numérica: qualquer outra forma de matriz (por exemplo, um caráterlógico ou matriz) fornecidos como uma matriz é tratada como um vetor de indexação.

Seguinte: O produto externo das duas matrizes , Anterior: Índice de matrizes , Up: matrizes ematrizes

5.4 O array() função

Bem como dar uma estrutura de um vetor dim atributo, os vetores podem ser construídos a partirde vetores da array função, que tem a forma

> Z <- matriz (data_vector, dim_vector)

Por exemplo, se o vetor h tem 24 ou menos, os números, então o comando

> Z <- matriz (h, c = dim (3,4,2))

usaria h criar 3 por 4 a 2 na série Z . Se o tamanho h é exatamente 24, o resultado é o mesmo que

> Z <- h; dim (Z) <- c (3,4,2)

No entanto, se h for menor que 24, os seus valores são reciclados a partir do início de novo parafazê-lo até o tamanho 24 (ver A regra da reciclagem ), mas dim(h) <- c(3,4,2) seria um sinalde erro sobre o descasamento comprimento. Como um exemplo extremo, mas comuns

> Z <- array (0, c (3,4,2))

torna Z uma matriz de zeros.

Neste ponto, dim(Z) representa o vetor de dimensão c(3,4,2) e Z[1:24] representa o vetor dedados como era no h , e Z[] com um índice vazio ou Z com não subscrito representa a matrizinteira como uma matriz.

Matrizes podem ser usadas em expressões aritméticas eo resultado é um conjunto formado poroperações elemento por elemento do vetor de dados. O dim atributos de operandos geralmenteprecisa ser o mesmo, e isso se torna o vetor de dimensão do resultado. Portanto, se A , B e C sãomatrizes semelhantes, então

> D <- 2 * A * B + C + 1

faz D uma matriz semelhante com o seu vetor de dados sendo o resultado do elemento-de-operações de determinado elemento. No entanto, a regra precisa quanto à matriz mista e oscálculos do vetor tem que ser considerado um pouco mais de cuidado.

A regra da reciclagem

Precedente: matriz A () função , Up: matriz A () função

5.4.1 vetores e aritmética mista matriz. A regra da reciclagem

A regra precisa afetando elemento por elemento misto cálculos com vetores e matrizes é algopeculiar e difícil de encontrar nas referências. Da experiência que temos encontrado o seguintepara ser um guia confiável.

A expressão é digitalizado a partir da esquerda para a direita.Qualquer operandos vetoriais curto são estendidos através da reciclagem de seus valores

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

24 de 99 25/02/2011 10:36

Page 25: r Manul Port

até que eles correspondam ao tamanho de qualquer outros operandos.Enquanto curto vetores e matrizes somente são encontradas, as matrizes devem ter todos amesma dim atributo ou um erro.Qualquer vector operando mais de um operando matricial ou matriz gera um erro.Se as estruturas de matriz estão presentes e nenhum erro ou a coação para vetor foiprecipitada, o resultado é uma estrutura matricial com o mercado comum dim atributo desua matriz operandos.

Seguinte: Generalized transposição de uma matriz , Anterior: A função Array () , Up: matrizes ematrizes

5,5 O produto exterior de dois vetores

Uma operação importante em matrizes é o produto externo. Se a e b são duas matrizes numéricas,seu produto externo é uma matriz cuja dimensão do vetor é obtido concatenando os dois vetoresde dimensão (a ordem é importante), e cujos dados vetoriais tenho, formando todos os produtospossíveis de elementos do vetor de dados a com os de b . O produto externo é formado pelooperador especial %o% :

<Ab> - a% b% o

Uma alternativa é

> <Ab - exterior (a, b, "*")

A função de multiplicação pode ser substituída por uma função arbitrária de duas variáveis. Porexemplo, se quisermos avaliar a função f (x, y) = cos (y) / (1 + x ̂2) sobre uma grade regular devalores com x-e y-coordenadas definida pelos vetores R x e y , respectivamente , podemosproceder da seguinte forma:

> F <- function (x, y) cos (y) / (1 + x ^ 2) > Z <- exterior (x, y, f)

Em particular, o produto externo de dois vetores normais é uma matriz duplamente subscrito (queé uma matriz de classificação, no máximo, 1). Observe que o operador produto externo é,naturalmente, não-comutativa. Definindo suas próprias funções R será considerado ainda emescrever suas próprias funções .

Um exemplo: Determinantes de 2 por 2 matrizes de um dígito

Como um exemplo, mas bonito artificial, considere os determinantes de matrizes 2 por 2 [a, b, c,d], onde cada entrada é um inteiro não-negativo no intervalo de 0, 1, ..., 9, que é um dígito .

O problema é encontrar os determinantes, ad - bc, de todas as matrizes possível desta forma erepresenta a freqüência com que cada valor ocorre como uma trama de alta densidade. Istoequivale a encontrar a distribuição de probabilidade de o fator determinante, se cada dígito éescolhido de forma independente e uniformemente ao acaso.

Uma boa forma de fazer isso usa o outer() função duas vezes:

> D <- exterior (0:09, 0:09) > <Fr - tabela (exterior (d, d, "-")) > Plot (as.numeric (nomes (fr)), fr, type = "h", XLAB = "determinantes", ylab = "Freqüência")

Observe a coerção dos names atributo da tabela de freqüência para numérico, a fim de recuperaro intervalo de valores determinantes. O óbvio "caminho" de fazer esse problema com o for loops,

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

25 de 99 25/02/2011 10:36

Page 26: r Manul Port

para ser discutido em Loops e execução condicional , é tão ineficaz quanto a ser impraticável.

Também é surpreendente que cerca de 1 em 20 matrizes seja singular.

Seguinte: instalações Matrix , Precedente: O exterior do produto de duas matrizes , Up: matrizes ematrizes

5,6 transposição generalizada de uma matriz

A função aperm(a, perm) pode ser usado para permutar uma matriz, a . O argumento perm deveser uma permutação dos inteiros {1, ..., k}, onde k é o número de subscritos em a . O resultado dafunção é uma matriz do mesmo tamanho que a velho, mas com dimensão dada por perm[j] setornando o novo j ª dimensão. A maneira mais fácil pensar desta operação é como umageneralização da transposição para as matrizes. De fato, se A é uma matriz (ou seja, uma subscritamatriz duplamente), então B dada por

> B <- aperm (A, C (2,1))

é apenas a transposição de A . Para este caso específico uma simples função de t() estádisponível, então poderíamos ter usado B <- t(A) .

Seguinte: Formação matrizes particionadas , Precedente: Generalized transposição de uma matriz, Up: matrizes e matrizes

5,7 instalações Matrix

Como mencionado acima, uma matriz é apenas uma matriz com dois subscritos. No entanto, é umcaso tão importante e específico que necessita de uma discussão em separado. R contém muitosoperadores e funções que estão disponíveis apenas para as matrizes. Por exemplo, t(X) é afunção de transpor a matriz, como descrito acima. As funções nrow(A) e ncol(A) indicar onúmero de linhas e colunas na matriz A , respectivamente.

Multiplicaçãoequações lineares e inversãoAutovalores e autovetoresdecomposição em valores singulares e determinantesMínimos quadrados montagem ea decomposição QR

Seguinte: equações lineares e de inversão , Precedente: instalações Matriz , Up: instalaçõesMatrix

5.7.1 A multiplicação de matrizes

O operador %*% é usado para multiplicação de matrizes. Um n por 1 ou por uma matriz n pode,naturalmente, ser usado como um vetor n-se no contexto como é apropriado. Por outro lado, osvetores que ocorrem em expressões de multiplicação de matrizes são automaticamentepromovidos tanto aos vetores linha ou coluna, o que for multiplicatively coerente, se possível,(embora nem sempre isso é possível de forma inequívoca, como vemos mais tarde).

Se, por exemplo, A e B são matrizes quadradas do mesmo tamanho, então

> A * B

é a matriz de elemento por elemento e produtos

> A *%% B

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

26 de 99 25/02/2011 10:36

Page 27: r Manul Port

é o produto da matriz. Se x é um vetor, em seguida,

>% * X% A *%% x

é uma forma quadrática. 15

A função crossprod() formas "crossproducts", significando que crossprod(X, y) é o mesmoque t(X) %*% y , mas a operação é mais eficiente. Se o segundo argumento para crossprod()for omitido, é considerado como sendo o mesmo que o primeiro.

O significado do diag() depende de seu argumento. diag(v) , onde v é um vetor, dá uma matrizdiagonal com elementos do vetor como as entradas de diagonal. Por outro lado diag(M) , onde Mé uma matriz, dá o principal vetor de entradas diagonais de M . Esta é a mesma convenção que outilizado para diag() em MATLAB. Além disso, um tanto confusa, se k é um valor numéricoúnico, então diag(k) é a k pelo k matriz identidade!

Seguinte: Autovalores e autovetores , Anterior: Multiplicação , Up: instalações Matrix

5.7.2 equações lineares e inversão

Resolução de equações lineares é a inversa da multiplicação de matrizes. Quando, depois de

B> <- A *% x%

apenas A e b são dadas, o vetor x é a solução desse sistema de equações lineares. Em R,

> Resolver (a, b)

resolve o sistema, retornando x (até alguma perda de precisão). Note-se que em álgebra linear,formalmente x = A^{-1} %*% b , onde A^{-1} indica o inverso de A , que pode ser calculadopor

resolver (A)

mas raramente é necessário. Numericamente, é ineficiente e potencialmente instável para calcularx <- solve(A) %*% b em vez de solve(A,b) .

A forma quadrática x %*% A^{-1} %*% x , que é usado em cálculos multivariada, deve ser

calculado por algo como 16 x %*% solve(A,x) , ao invés de calcular a inversa de A .

Seguinte: decomposição em valores singulares e determinantes , Precedente: equações lineares einversão Up:, instalações Matrix

5.7.3 Autovalores e autovetores

A função eigen(Sm) calcula os autovalores e autovetores de uma matriz simétrica Sm . Oresultado desta função é uma lista de dois componentes chamados values e vectors . Aatribuição

> <Ev - eigen (Sm)

atribui essa lista para ev . Então ev$val é o vetor de autovalores de Sm e ev$vec é a matriz deautovetores correspondentes. Se tivéssemos apenas necessário os autovalores poderíamos terusado o serviço:

evals> <- eigen (Sm) $ valores

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

27 de 99 25/02/2011 10:36

Page 28: r Manul Port

evals agora detém o vetor de autovalores eo segundo componente é descartado. Se a expressão

> Eigen (Sm)

é usado por si só como um comando os dois componentes são impressas, com os seus nomes. Paragrandes matrizes é melhor evitar a computação autovetores se eles não são necessários ao usar aexpressão

evals> <- eigen (Sm, only.values = TRUE) $ valores

Seguinte: Mínimos quadrados montagem ea decomposição QR , Precedente: Autovalores eautovetores , Up: instalações Matrix

5.7.4 decomposição em valores singulares e determinantes

A função svd(M) tem uma matriz de argumentos arbitrários, M , e calcula a decomposição emvalores singulares de M . Este consiste de uma matriz de colunas ortonormais U com o espaçomesma coluna M , segundo uma matriz de colunas ortonormais V , cujo espaço de coluna é oespaço de linha de M e uma matriz diagonal de entradas positivas D tal que M = U %*% D %*%t(V) . D é realmente voltou como um vetor de elementos da diagonal. O resultado da svd(M) é naverdade uma lista de três componentes chamados d , u e v , com significados evidentes.

Se M é na praça de fato, então, não é difícil perceber que

> AbsdetM <- prod (svd (M) $ d)

calcula o valor absoluto do determinante de M . Se este cálculo fosse necessário, muitas vezes comuma variedade de matrizes pode ser definida como uma função de R

> <Absdet - função (M) prod (svd (M) $ d)

after which we could use absdet() as just another R function. As a further trivial but potentiallyuseful example, you might like to consider writing a function, say tr() , to calculate the trace ofa square matrix. [Hint: You will not need to use an explicit loop. Look again at the diag()function.]

R has a builtin function det to calculate a determinant, including the sign, and another,determinant , to give the sign and modulus (optionally on log scale),

Previous: Singular value decomposition and determinants , Up: Matrix facilities

5.7.5 Least squares fitting and the QR decomposition

The function lsfit() returns a list giving results of a least squares fitting procedure. Anassignment such as

> ans <- lsfit(X, y)

gives the results of a least squares fit where y is the vector of observations and X is the designmatrix. See the help facility for more details, and also for the follow-up function ls.diag() for,among other things, regression diagnostics. Note that a grand mean term is automatically includedand need not be included explicitly as a column of X . Further note that you almost always willprefer using lm(.) (see Linear models ) to lsfit() for regression modelling.

Another closely related function is qr() and its allies. Consider the following assignments

> Xplus <- qr(X) > b <- qr.coef(Xplus, y)

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

28 de 99 25/02/2011 10:36

Page 29: r Manul Port

> fit <- qr.fitted(Xplus, y) > res <- qr.resid(Xplus, y)

These compute the orthogonal projection of y onto the range of X in fit , the projection onto theorthogonal complement in res and the coefficient vector for the projection in b , that is, b isessentially the result of the MATLAB `backslash' operator.

It is not assumed that X has full column rank. Redundancies will be discovered and removed asthey are found.

This alternative is the older, low-level way to perform least squares calculations. Although stilluseful in some contexts, it would now generally be replaced by the statistical models features, aswill be discussed in Statistical models in R .

Next: The concatenation function c() with arrays , Previous: Matrix facilities , Up: Arrays andmatrices

5.8 Forming partitioned matrices, cbind() and rbind()

As we have already seen informally, matrices can be built up from other vectors and matrices bythe functions cbind() and rbind() . Roughly cbind() forms matrices by binding togethermatrices horizontally, or column-wise, and rbind() vertically, or row-wise.

In the assignment

> X <- cbind( arg_1 , arg_2 , arg_3 , ...)

the arguments to cbind() must be either vectors of any length, or matrices with the same columnsize, that is the same number of rows. The result is a matrix with the concatenated argumentsarg_1 , arg_2 , ... forming the columns.

If some of the arguments to cbind() are vectors they may be shorter than the column size of anymatrices present, in which case they are cyclically extended to match the matrix column size (orthe length of the longest vector if no matrices are given).

The function rbind() does the corresponding operation for rows. In this case any vectorargument, possibly cyclically extended, are of course taken as row vectors.

Suppose X1 and X2 have the same number of rows. To combine these by columns into a matrix X ,together with an initial column of 1 s we can use

> X <- cbind(1, X1, X2)

The result of rbind() or cbind() always has matrix status. Hence cbind(x) and rbind(x) arepossibly the simplest ways explicitly to allow the vector x to be treated as a column or row matrixrespectively.

Next: Frequency tables from factors , Previous: Forming partitioned matrices , Up: Arrays andmatrices

5.9 The concatenation function, c() , with arrays

It should be noted that whereas cbind() and rbind() are concatenation functions that respectdim attributes, the basic c() function does not, but rather clears numeric objects of all dim anddimnames attributes. This is occasionally useful in its own right.

The official way to coerce an array back to a simple vector object is to use as.vector()

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

29 de 99 25/02/2011 10:36

Page 30: r Manul Port

> vec <- as.vector(X)

However a similar result can be achieved by using c() with just one argument, simply for thisside-effect:

> vec <- c(X)

There are slight differences between the two, but ultimately the choice between them is largely amatter of style (with the former being preferable).

Previous: The concatenation function c() with arrays , Up: Arrays and matrices

5.10 Frequency tables from factors

Recall that a factor defines a partition into groups. Similarly a pair of factors defines a two waycross classification, and so on. The function table() allows frequency tables to be calculatedfrom equal length factors. If there are k factor arguments, the result is a k-way array offrequencies.

Suppose, for example, that statef is a factor giving the state code for each entry in a data vector.A atribuição

> statefr <- table(statef)

gives in statefr a table of frequencies of each state in the sample. The frequencies are orderedand labelled by the levels attribute of the factor. This simple case is equivalent to, but moreconvenient than,

> statefr <- tapply(statef, statef, length)

Further suppose that incomef is a factor giving a suitably defined “income class” for each entryin the data vector, for example with the cut() function:

> factor(cut(incomes, breaks = 35+10*(0:7))) -> incomef

Then to calculate a two-way table of frequencies:

> table(incomef,statef) statef incomef act nsw nt qld sa tas vic wa (35,45] 1 1 0 1 0 0 1 0 (45,55] 1 1 1 1 2 0 1 3 (55,65] 0 3 1 3 2 2 2 1 (65,75] 0 1 0 0 0 0 1 0

Extension to higher-way frequency tables is immediate.

Next: Reading data from files , Previous: Arrays and matrices , Up: Top

6 Lists and data frames

ListasConstructing and modifying listsData frames

Next: Constructing and modifying lists , Previous: Lists and data frames , Up: Lists and dataframes

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

30 de 99 25/02/2011 10:36

Page 31: r Manul Port

6.1 Lists

An R list is an object consisting of an ordered collection of objects known as its components .

There is no particular need for the components to be of the same mode or type, and, for example,a list could consist of a numeric vector, a logical value, a matrix, a complex vector, a characterarray, a function, and so on. Here is a simple example of how to make a list:

> Lst <- list(name="Fred", wife="Mary", no.children=3, child.ages=c(4,7,9))

Components are always numbered and may always be referred to as such. Thus if Lst is the nameof a list with four components, these may be individually referred to as Lst[[1]] , Lst[[2]] ,Lst[[3]] and Lst[[4]] . If, further, Lst[[4]] is a vector subscripted array then Lst[[4]][1]is its first entry.

If Lst is a list, then the function length(Lst) gives the number of (top level) components it has.

Components of lists may also be named , and in this case the component may be referred to eitherby giving the component name as a character string in place of the number in double squarebrackets, or, more conveniently, by giving an expression of the form

> name $ component_name

for the same thing.

This is a very useful convention as it makes it easier to get the right component if you forget thenumber.

So in the simple example given above:

Lst$name is the same as Lst[[1]] and is the string "Fred" ,

Lst$wife is the same as Lst[[2]] and is the string "Mary" ,

Lst$child.ages[1] is the same as Lst[[4]][1] and is the number 4 .

Additionally, one can also use the names of the list components in double square brackets, ie,Lst[["name"]] is the same as Lst$name . This is especially useful, when the name of thecomponent to be extracted is stored in another variable as in

> x <- "name"; Lst[[x]]

It is very important to distinguish Lst[[1]] from Lst[1] . ' [[ ... ]] ' is the operator used toselect a single element, whereas ' [ ... ] ' is a general subscripting operator. Thus the former isthe first object in the list Lst , and if it is a named list the name is not included. The latter is asublist of the list Lst consisting of the first entry only. If it is a named list, the names aretransferred to the sublist.

The names of components may be abbreviated down to the minimum number of letters needed toidentify them uniquely. Thus Lst$coefficients may be minimally specified as Lst$coe andLst$covariance as Lst$cov .

The vector of names is in fact simply an attribute of the list like any other and may be handled assuch. Other structures besides lists may, of course, similarly be given a names attribute also.

Next: Data frames , Previous: Lists , Up: Lists and data frames

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

31 de 99 25/02/2011 10:36

Page 32: r Manul Port

6.2 Constructing and modifying lists

New lists may be formed from existing objects by the function list() . An assignment of theform

> Lst <- list( name_1 = object_1 , ... , name_m = object_m )

sets up a list Lst of m components using object_1 , ... , object_m for the components and givingthem names as specified by the argument names, (which can be freely chosen). If these names areomitted, the components are numbered only. The components used to form the list are copiedwhen forming the new list and the originals are not affected.

Lists, like any subscripted object, can be extended by specifying additional components. Porexemplo

> Lst[5] <- list(matrix=Mat)

Concatenating lists

Previous: Constructing and modifying lists , Up: Constructing and modifying lists

6.2.1 Concatenating lists

When the concatenation function c() is given list arguments, the result is an object of mode listalso, whose components are those of the argument lists joined together in sequence.

> list.ABC <- c(list.A, list.B, list.C)

Recall that with vector objects as arguments the concatenation function similarly joined togetherall arguments into a single vector structure. In this case all other attributes, such as dim attributes,are discarded.

Previous: Constructing and modifying lists , Up: Lists and data frames

6.3 Data frames

A data frame is a list with class "data.frame" . There are restrictions on lists that may be madeinto data frames, namely

The components must be vectors (numeric, character, or logical), factors, numeric matrices,lists, or other data frames.Matrices, lists, and data frames provide as many variables to the new data frame as theyhave columns, elements, or variables, respectively.Numeric vectors, logicals and factors are included as is, and character vectors are coercedto be factors, whose levels are the unique values appearing in the vector.Vector structures appearing as variables of the data frame must all have the same length ,and matrix structures must all have the same row size .

A data frame may for many purposes be regarded as a matrix with columns possibly of differingmodes and attributes. It may be displayed in matrix form, and its rows and columns extractedusing matrix indexing conventions.

Making data framesattach() and detach()Working with data framesAttaching arbitrary listsManaging the search path

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

32 de 99 25/02/2011 10:36

Page 33: r Manul Port

Next: attach() and detach() , Previous: Data frames , Up: Data frames

6.3.1 Making data frames

Objects satisfying the restrictions placed on the columns (components) of a data frame may beused to form one using the function data.frame :

> accountants <- data.frame(home=statef, loot=incomes, shot=incomef)

A list whose components conform to the restrictions of a data frame may be coerced into a dataframe using the function as.data.frame() The simplest way to construct a data frame fromscratch is to use the read.table() function to read an entire data frame from an external file.This is discussed further in Reading data from files .

Next: Working with data frames , Previous: Making data frames , Up: Data frames

6.3.2 attach() and detach()

The $ notation, such as accountants$statef , for list components is not always veryconvenient. A useful facility would be somehow to make the components of a list or data frametemporarily visible as variables under their component name, without the need to quote the listname explicitly each time.

The attach() function takes a `database' such as a list or data frame as its argument. Thussuppose lentils is a data frame with three variables lentils$u , lentils$v , lentils$w . Theattach

> attach(lentils)

places the data frame in the search path at position 2 , and provided there are no variables u , v orw in position 1 , u , v and w are available as variables from the data frame in their own right. Atthis point an assignment such as

> u <- v+w

does not replace the component u of the data frame, but rather masks it with another variable u inthe working directory at position 1 on the search path. To make a permanent change to the dataframe itself, the simplest way is to resort once again to the $ notation:

> lentils$u <- v+w

However the new value of component u is not visible until the data frame is detached andattached again.

To detach a data frame, use the function

> detach()

More precisely, this statement detaches from the search path the entity currently at position 2 .Thus in the present context the variables u , v and w would be no longer visible, except under thelist notation as lentils$u and so on. Entities at positions greater than 2 on the search path can bedetached by giving their number to detach , but it is much safer to always use a name, forexample by detach(lentils) or detach("lentils")

Note: In R lists and data frames can only be attached at position 2 or above, andwhat is attached is a copy of the original object. You can alter the attached values viaassign , but the original list or data frame is unchanged.

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

33 de 99 25/02/2011 10:36

Page 34: r Manul Port

Next: Attaching arbitrary lists , Previous: attach() and detach() , Up: Data frames

6.3.3 Working with data frames

A useful convention that allows you to work with many different problems comfortably togetherin the same working directory is

gather together all variables for any well defined and separate problem in a data frameunder a suitably informative name;when working with a problem attach the appropriate data frame at position 2 , and use theworking directory at level 1 for operational quantities and temporary variables;before leaving a problem, add any variables you wish to keep for future reference to thedata frame using the $ form of assignment, and then detach() ;finally remove all unwanted variables from the working directory and keep it as clean ofleft-over temporary variables as possible.

In this way it is quite simple to work with many problems in the same directory, all of which havevariables named x , y and z , for example.

Next: Managing the search path , Previous: Working with data frames , Up: Data frames

6.3.4 Attaching arbitrary lists

attach() is a generic function that allows not only directories and data frames to be attached tothe search path, but other classes of object as well. In particular any object of mode "list" maybe attached in the same way:

> attach(any.old.list)

Anything that has been attached can be detached by detach , by position number or, preferably,by name.

Previous: Attaching arbitrary lists , Up: Data frames

6.3.5 Managing the search path

The function search shows the current search path and so is a very useful way to keep track ofwhich data frames and lists (and packages) have been attached and detached. Initially it gives

> search() [1] ".GlobalEnv" "Autoloads" "package:base"

where .GlobalEnv is the workspace. 17

After lentils is attached we have

> search() [1] ".GlobalEnv" "lentils" "Autoloads" "package:base" > ls(2) [1] "u" "v" "w"

and as we see ls (or objects ) can be used to examine the contents of any position on the searchpath.

Finally, we detach the data frame and confirm it has been removed from the search path.

> detach("lentils")

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

34 de 99 25/02/2011 10:36

Page 35: r Manul Port

> search() [1] ".GlobalEnv" "Autoloads" "package:base"

Next: Probability distributions , Previous: Lists and data frames , Up: Top

7 Reading data from files

Large data objects will usually be read as values from external files rather than entered during anR session at the keyboard. R input facilities are simple and their requirements are fairly strict andeven rather inflexible. There is a clear presumption by the designers of R that you will be able to

modify your input files using other tools, such as file editors or Perl 18 to fit in with therequirements of R. Generally this is very simple.

If variables are to be held mainly in data frames, as we strongly suggest they should be, an entiredata frame can be read directly with the read.table() function. There is also a more primitiveinput function, scan() , that can be called directly.

For more details on importing data into R and also exporting data, see the R Data Import/Exportmanual.

The read.table() functionThe scan() functionAccessing builtin datasetsEditing data

Next: The scan() function , Previous: Reading data from files , Up: Reading data from files

7.1 The read.table() function

To read an entire data frame directly, the external file will normally have a special form.

The first line of the file should have a name for each variable in the data frame.Each additional line of the file has as its first item a row label and the values for eachvariable.

If the file has one fewer item in its first line than in its second, this arrangement is presumed to bein force. So the first few lines of a file to be read as a data frame might look as follows.

Input file form with names and row labels: Price Floor Area Rooms Age Cent.heat 01 52.00 111.0 830 5 6.2 no 02 54.75 128.0 710 5 7.5 no 03 57.50 101.0 1000 5 4.2 no 04 57.50 131.0 690 6 8.8 no 05 59.75 93.0 900 5 1.9 yes ...

By default numeric items (except row labels) are read as numeric variables and non-numericvariables, such as Cent.heat in the example, as factors. This can be changed if necessary.

The function read.table() can then be used to read the data frame directly

> HousePrice <- read.table("houses.data")

Often you will want to omit including the row labels directly and use the default labels. In this

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

35 de 99 25/02/2011 10:36

Page 36: r Manul Port

case the file may omit the row label column as in the following.

Input file form without row labels: Price Floor Area Rooms Age Cent.heat 52.00 111.0 830 5 6.2 no 54.75 128.0 710 5 7.5 no 57.50 101.0 1000 5 4.2 no 57.50 131.0 690 6 8.8 no 59.75 93.0 900 5 1.9 yes ...

The data frame may then be read as

> HousePrice <- read.table("houses.data", header=TRUE)

where the header=TRUE option specifies that the first line is a line of headings, and hence, byimplication from the form of the file, that no explicit row labels are given.

The scan() function

Next: Accessing builtin datasets , Previous: The read.table() function , Up: Reading data fromfiles

7.2 The scan() function

Suppose the data vectors are of equal length and are to be read in parallel. Further suppose thatthere are three vectors, the first of mode character and the remaining two of mode numeric, andthe file is input.dat . The first step is to use scan() to read in the three vectors as a list, asfollows

> inp <- scan("input.dat", list("",0,0))

The second argument is a dummy list structure that establishes the mode of the three vectors to beread. The result, held in inp , is a list whose components are the three vectors read in. To separatethe data items into three separate vectors, use assignments like

> label <- inp[[1]]; x <- inp[[2]]; y <- inp[[3]]

More conveniently, the dummy list can have named components, in which case the names can beused to access the vectors read in. For example

> inp <- scan("input.dat", list(id="", x=0, y=0))

If you wish to access the variables separately they may either be re-assigned to variables in theworking frame:

> label <- inp$id; x <- inp$x; y <- inp$y

or the list may be attached at position 2 of the search path (see Attaching arbitrary lists ).

If the second argument is a single value and not a list, a single vector is read in, all components ofwhich must be of the same mode as the dummy value.

> X <- matrix(scan("light.dat", 0), ncol=5, byrow=TRUE)

There are more elaborate input facilities available and these are detailed in the manuals.

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

36 de 99 25/02/2011 10:36

Page 37: r Manul Port

Next: Editing data , Previous: The scan() function , Up: Reading data from files

7.3 Accessing builtin datasets

Around 100 datasets are supplied with R (in package datasets ), and others are available inpackages (including the recommended packages supplied with R). To see the list of datasetscurrently available use

data()

As from R version 2.0.0 all the datasets supplied with R are available directly by name. However,many packages still use the earlier convention in which data was also used to load datasets intoR, for example

data(infert)

and this can still be used with the standard packages (as in this example). In most cases this willload an R object of the same name. However, in a few cases it loads several objects, so see theon-line help for the object to see what to expect.

7.3.1 Loading data from other R packages

To access data from a particular package, use the package argument, for example

data(package="rpart") data(Puromycin, package="datasets")

If a package has been attached by library , its datasets are automatically included in the search.

User-contributed packages can be a rich source of datasets.

Previous: Accessing builtin datasets , Up: Reading data from files

7.4 Editing data

When invoked on a data frame or matrix, edit brings up a separate spreadsheet-like environmentfor editing. This is useful for making small changes once a data set has been read. O comando

> xnew <- edit(xold)

will allow you to edit your data set xold , and on completion the changed object is assigned toxnew . If you want to alter the original dataset xold , the simplest way is to use fix(xold) ,which is equivalent to xold <- edit(xold) .

Use

> xnew <- edit(data.frame())

to enter new data via the spreadsheet interface.

Next: Loops and conditional execution , Previous: Reading data from files , Up: Top

8 Probability distributions

R as a set of statistical tablesExamining the distribution of a set of dataOne- and two-sample tests

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

37 de 99 25/02/2011 10:36

Page 38: r Manul Port

Next: Examining the distribution of a set of data , Previous: Probability distributions , Up:Probability distributions

8.1 R as a set of statistical tables

One convenient use of R is to provide a comprehensive set of statistical tables. Functions areprovided to evaluate the cumulative distribution function P(X <= x), the probability densityfunction and the quantile function (given q, the smallest x such that P(X <= x) > q), and tosimulate from the distribution.

Distribuição R name argumentos adicionais

beta beta shape1, shape2, ncp

binômio binom size, prob

Cauchy cauchy location, scale

chi-squared chisq df, ncp

exponencial exp rate

F f df1, df2, ncp

gama gamma shape, scale

geométrico geom prob

hypergeometric hyper m, n, k

log-normal lnorm meanlog, sdlog

logística logis location, scale

negative binomial nbinom size, prob

normal norm mean, sd

Poisson pois lambda

signed rank signrank n

Student's t t df, ncp

uniforme unif min, max

Weibull weibull shape, scale

Wilcoxon wilcox m, n

Prefix the name given here by ' d ' for the density, ' p ' for the CDF, ' q ' for the quantile functionand ' r ' for simulation ( r andom deviates). The first argument is x for d xxx , q for p xxx , p for qxxx and n for r xxx (except for rhyper , rsignrank and rwilcox , for which it is nn ). In notquite all cases is the non-centrality parameter ncp currently available: see the on-line help fordetails.

The p xxx and q xxx functions all have logical arguments lower.tail and log.p and the d xxxones have log . This allows, eg, getting the cumulative (or “integrated”) hazard function, H(t) = -log(1 - F(t)), by

- p xxx (t, ..., lower.tail = FALSE, log.p = TRUE)

or more accurate log-likelihoods (by d xxx (..., log = TRUE) ), directly.

In addition there are functions ptukey and qtukey for the distribution of the studentized range ofsamples from a normal distribution, and dmultinom and rmultinom for the multinomialdistribution. Further distributions are available in contributed packages, notably SuppDists .

Aqui estão alguns exemplos

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

38 de 99 25/02/2011 10:36

Page 39: r Manul Port

> ## 2-tailed p-value for t distribution > 2*pt(-2.43, df = 13)

> ## upper 1% point for an F(2, 7) distribution > qf(0.01, 2, 7, lower.tail = FALSE)

See the on-line help on RNG for how random-number generation is done in R.

Next: One- and two-sample tests , Previous: R as a set of statistical tables , Up: Probabilitydistributions

8.2 Examining the distribution of a set of data

Given a (univariate) set of data we can examine its distribution in a large number of ways. Thesimplest is to examine the numbers. Two slightly different summaries are given by summary andfivenum and a display of the numbers by stem (a “stem and leaf” plot).

> attach(faithful) > summary(eruptions) Min. 1st Qu. Median Mean 3rd Qu. Máx. 1.600 2.163 4.000 3.488 4.454 5.100 > fivenum(eruptions) [1] 1.6000 2.1585 4.0000 4.4585 5.1000 > stem(eruptions) The decimal point is 1 digit(s) to the left of the | 16 | 070355555588 18 | 000022233333335577777777888822335777888 20 | 00002223378800035778 22 | 0002335578023578 24 | 00228 26 | 23 28 | 080 30 | 7 32 | 2337 34 | 250077 36 | 0000823577 38 | 2333335582225577 40 | 0000003357788888002233555577778 42 | 03335555778800233333555577778 44 | 02222335557780000000023333357778888 46 | 0000233357700000023578 48 | 00000022335800333 50 | 0370

A stem-and-leaf plot is like a histogram, and R has a function hist to plot histograms.

> hist(eruptions)

## make the bins smaller, make a plot of density > hist(eruptions, seq(1.6, 5.2, 0.2), prob=TRUE) > lines(density(eruptions, bw=0.1))

> rug(eruptions) # show the actual data points

More elegant density plots can be made by density , and we added a line produced by densityin this example. The bandwidth bw was chosen by trial-and-error as the default gives too muchsmoothing (it usually does for “interesting” densities). (Better automated methods of bandwidthchoice are available, and in this example bw = "SJ" gives a good result.)

We can plot the empirical cumulative distribution function by using the function ecdf .

> plot(ecdf(eruptions), do.points=FALSE, verticals=TRUE)

This distribution is obviously far from any standard distribution. How about the right-hand mode,

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

39 de 99 25/02/2011 10:36

Page 40: r Manul Port

say eruptions of longer than 3 minutes? Let us fit a normal distribution and overlay the fittedCDF.

> long <- eruptions[eruptions > 3] > plot(ecdf(long), do.points=FALSE, verticals=TRUE) > x <- seq(3, 5.4, 0.01) > lines(x, pnorm(x, mean=mean(long), sd=sqrt(var(long))), lty=3)

Quantile-quantile (QQ) plots can help us examine this more carefully.

par(pty="s") # arrange for a square figure region qqnorm(long); qqline(long)

which shows a reasonable fit but a shorter right tail than one would expect from a normaldistribution. Let us compare this with some simulated data from at distribution

x <- rt(250, df = 5) qqnorm(x); qqline(x)

which will usually (if it is a random sample) show longer tails than expected for a normal. We canmake a QQ plot against the generating distribution by

qqplot(qt(ppoints(250), df = 5), x, xlab = "QQ plot for t dsn") qqline(x)

Finally, we might want a more formal test of agreement with normality (or not). R provides theShapiro-Wilk test

> shapiro.test(long) Shapiro-Wilk normality test data: long W = 0.9793, p-value = 0.01052

and the Kolmogorov-Smirnov test

> ks.test(long, "pnorm", mean = mean(long), sd = sqrt(var(long))) One-sample Kolmogorov-Smirnov test data: long D = 0.0661, p-value = 0.4284 alternative hypothesis: two.sided

(Note that the distribution theory is not valid here as we have estimated the parameters of thenormal distribution from the same sample.)

Previous: Examining the distribution of a set of data , Up: Probability distributions

8.3 One- and two-sample tests

So far we have compared a single sample to a normal distribution. A much more commonoperation is to compare aspects of two samples. Note that in R, all “classical” tests including theones used below are in package stats which is normally loaded.

Consider the following sets of data on the latent heat of the fusion of ice ( cal/gm ) from Rice(1995, p.490)

Method A: 79.98 80.04 80.02 80.04 80.03 80.03 80.04 79.97 80.05 80.03 80.02 80.00 80.02 Method B: 80.02 79.94 79.98 79.97 79.97 80.03 79.95 79.97

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

40 de 99 25/02/2011 10:36

Page 41: r Manul Port

Boxplots provide a simple graphical comparison of the two samples.

A <- scan() 79.98 80.04 80.02 80.04 80.03 80.03 80.04 79.97 80.05 80.03 80.02 80.00 80.02 B <- scan() 80.02 79.94 79.98 79.97 79.97 80.03 79.95 79.97 boxplot(A, B)

which indicates that the first group tends to give higher results than the second.

To test for the equality of the means of the two examples, we can use an unpaired t-test by

> t.test(A, B) Welch Two Sample t-test data: A and B t = 3.2499, df = 12.027, p-value = 0.00694 alternative hypothesis: true difference in means is not equal to 0 95 percent confidence interval: 0.01385526 0.07018320 sample estimates: mean of x mean of y 80.02077 79.97875

which does indicate a significant difference, assuming normality. By default the R function doesnot assume equality of variances in the two samples (in contrast to the similar S-PLUS t.testfunction). We can use the F test to test for equality in the variances, provided that the twosamples are from normal populations.

> var.test(A, B) F test to compare two variances data: A and B F = 0.5837, num df = 12, denom df = 7, p-value = 0.3938 alternative hypothesis: true ratio of variances is not equal to 1 95 percent confidence interval: 0.1251097 2.1052687 sample estimates: ratio of variances 0.5837405

which shows no evidence of a significant difference, and so we can use the classical t-test thatassumes equality of the variances.

> t.test(A, B, var.equal=TRUE) Two Sample t-test data: A and B t = 3.4722, df = 19, p-value = 0.002551 alternative hypothesis: true difference in means is not equal to 0 95 percent confidence interval: 0.01669058 0.06734788 sample estimates: mean of x mean of y 80.02077 79.97875

All these tests assume normality of the two samples. The two-sample Wilcoxon (orMann-Whitney) test only assumes a common continuous distribution under the null hypothesis.

> wilcox.test(A, B)

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

41 de 99 25/02/2011 10:36

Page 42: r Manul Port

Wilcoxon rank sum test with continuity correction data: A and B W = 89, p-value = 0.007497 alternative hypothesis: true location shift is not equal to 0 Warning message: Cannot compute exact p-value with ties in: wilcox.test(A, B)

Note the warning: there are several ties in each sample, which suggests strongly that these dataare from a discrete distribution (probably due to rounding).

There are several ways to compare graphically the two samples. We have already seen a pair ofboxplots. Os seguintes

> plot(ecdf(A), do.points=FALSE, verticals=TRUE, xlim=range(A, B)) > plot(ecdf(B), do.points=FALSE, verticals=TRUE, add=TRUE)

will show the two empirical CDFs, and qqplot will perform a QQ plot of the two samples. TheKolmogorov-Smirnov test is of the maximal vertical distance between the two ecdf's, assuming acommon continuous distribution:

> ks.test(A, B) Two-sample Kolmogorov-Smirnov test data: A and B D = 0.5962, p-value = 0.05919 alternative hypothesis: two-sided Warning message: cannot compute correct p-values with ties in: ks.test(A, B)

Next: Writing your own functions , Previous: Probability distributions , Up: Top

9 Grouping, loops and conditional execution

Grouped expressionsControl statements

Next: Control statements , Previous: Loops and conditional execution , Up: Loops and conditionalexecution

9.1 Grouped expressions

R is an expression language in the sense that its only command type is a function or expressionwhich returns a result. Even an assignment is an expression whose result is the value assigned,and it may be used wherever any expression may be used; in particular multiple assignments arepossible.

Commands may be grouped together in braces, { expr_1 ; ... ; expr_m } , in which case the valueof the group is the result of the last expression in the group evaluated. Since such a group is alsoan expression it may, for example, be itself included in parentheses and used a part of an evenlarger expression, and so on.

Previous: Grouped expressions , Up: Loops and conditional execution

9.2 Control statements

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

42 de 99 25/02/2011 10:36

Page 43: r Manul Port

Conditional executionRepetitive execution

Next: Repetitive execution , Previous: Control statements , Up: Control statements

9.2.1 Conditional execution: if statements

The language has available a conditional construction of the form

> if ( expr_1 ) expr_2 else expr_3

where expr_1 must evaluate to a single logical value and the result of the entire expression is thenevident.

The “short-circuit” operators && and || are often used as part of the condition in an if statement.Whereas & and | apply element-wise to vectors, && and || apply to vectors of length one, andonly evaluate their second argument if necessary.

There is a vectorized version of the if / else construct, the ifelse function. This has the formifelse(condition, a, b) and returns a vector of the length of its longest argument, withelements a[i] if condition[i] is true, otherwise b[i] .

Previous: Conditional execution , Up: Control statements

9.2.2 Repetitive execution: for loops, repeat and while

There is also a for loop construction which has the form

> for ( name in expr_1 ) expr_2

where name is the loop variable. expr_1 is a vector expression, (often a sequence like 1:20 ), andexpr_2 is often a grouped expression with its sub-expressions written in terms of the dummyname . expr_2 is repeatedly evaluated as name ranges through the values in the vector result ofexpr_1 .

As an example, suppose ind is a vector of class indicators and we wish to produce separate plots

of y versus x within classes. One possibility here is to use coplot() , 19 which will produce anarray of plots corresponding to each level of the factor. Another way to do this, now putting allplots on the one display, is as follows:

> xc <- split(x, ind) > yc <- split(y, ind) > for (i in 1:length(yc)) { plot(xc[[i]], yc[[i]]) abline(lsfit(xc[[i]], yc[[i]])) }

(Note the function split() which produces a list of vectors obtained by splitting a larger vectoraccording to the classes specified by a factor. This is a useful function, mostly used in connectionwith boxplots. See the help facility for further details.)

Warning : for() loops are used in R code much less often than in compiledlanguages. Code that takes a `whole object' view is likely to be both clearer andfaster in R.

Other looping facilities include the

> repeat expr

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

43 de 99 25/02/2011 10:36

Page 44: r Manul Port

statement and the

> while ( condition ) expr

declaração.

The break statement can be used to terminate any loop, possibly abnormally. This is the only wayto terminate repeat loops. The next statement can be used to discontinue one particular cycleand skip to the “next”. Control statements are most often used in connection with functionswhich are discussed in Writing your own functions , and where more examples will emerge.

Next: Statistical models in R , Previous: Loops and conditional execution , Up: Top

10 Writing your own functions

As we have seen informally along the way, the R language allows the user to create objects ofmode function . These are true R functions that are stored in a special internal form and may beused in further expressions and so on. In the process, the language gains enormously in power,convenience and elegance, and learning to write useful functions is one of the main ways to makeyour use of R comfortable and productive.

It should be emphasized that most of the functions supplied as part of the R system, such asmean() , var() , postscript() and so on, are themselves written in R and thus do not differmaterially from user written functions.

A function is defined by an assignment of the form

> name <- function( arg_1 , arg_2 , ...) expression

The expression is an R expression, (usually a grouped expression), that uses the arguments, arg_i, to calculate a value. The value of the expression is the value returned for the function.

A call to the function then usually takes the form name ( expr_1 , expr_2 , ...) and may occuranywhere a function call is legitimate.

Simple examplesDefining new binary operatorsNamed arguments and defaultsThe three dots argumentAssignment within functionsMore advanced examplesÂmbitoCustomizing the environmentObject orientation

Next: Defining new binary operators , Previous: Writing your own functions , Up: Writing yourown functions

10.1 Simple examples

As a first example, consider a function to calculate the two sample t-statistic, showing “all thesteps”. This is an artificial example, of course, since there are other, simpler ways of achieving thesame end.

The function is defined as follows:

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

44 de 99 25/02/2011 10:36

Page 45: r Manul Port

> twosam <- function(y1, y2) { n1 <- length(y1); n2 <- length(y2) yb1 <- mean(y1); yb2 <- mean(y2) s1 <- var(y1); s2 <- var(y2) s <- ((n1-1)*s1 + (n2-1)*s2)/(n1+n2-2) tst <- (yb1 - yb2)/sqrt(s*(1/n1 + 1/n2)) TST }

With this function defined, you could perform two sample t-tests using a call such as

> tstat <- twosam(data$male, data$female); tstat

As a second example, consider a function to emulate directly the MATLAB backslash command,which returns the coefficients of the orthogonal projection of the vector y onto the column spaceof the matrix, X. (This is ordinarily called the least squares estimate of the regressioncoefficients.) This would ordinarily be done with the qr() function; however this is sometimes abit tricky to use directly and it pays to have a simple function such as the following to use itsafely.

Thus given an by 1 vector y and an n by p matrix X then X \ y is defined as (X'X)^{-}X'y, where(X'X)^{-} is a generalized inverse of X'X.

> bslash <- function(X, y) { X <- qr(X) qr.coef(X, y) }

After this object is created it may be used in statements such as

> regcoeff <- bslash(Xmat, yvar)

e assim por diante.

The classical R function lsfit() does this job quite well, and more 20 . It in turn uses thefunctions qr() and qr.coef() in the slightly counterintuitive way above to do this part of thecalculation. Hence there is probably some value in having just this part isolated in a simple to usefunction if it is going to be in frequent use. If so, we may wish to make it a matrix binary operatorfor even more convenient use.

Next: Named arguments and defaults , Previous: Simple examples , Up: Writing your ownfunctions

10.2 Defining new binary operators

Had we given the bslash() function a different name, namely one of the form

% anything %

it could have been used as a binary operator in expressions rather than in function form.Suppose, for example, we choose ! for the internal character. The function definition would thenstart as

> "%!%" <- function(X, y) { ... }

(Note the use of quote marks.) The function could then be used as X %!% y . (The backslashsymbol itself is not a convenient choice as it presents special problems in this context.)

The matrix multiplication operator, %*% , and the outer product matrix operator %o% are otherexamples of binary operators defined in this way.

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

45 de 99 25/02/2011 10:36

Page 46: r Manul Port

Next: The three dots argument , Previous: Defining new binary operators , Up: Writing your ownfunctions

10.3 Named arguments and defaults

As first noted in Generating regular sequences , if arguments to called functions are given in the “name = object ” form, they may be given in any order. Furthermore the argument sequence maybegin in the unnamed, positional form, and specify named arguments after the positionalarguments.

Thus if there is a function fun1 defined by

> fun1 <- function(data, data.frame, graph, limit) {

[function body omitted] }

then the function may be invoked in several ways, for example

> ans <- fun1(d, df, TRUE, 20) > ans <- fun1(d, df, graph=TRUE, limit=20) > ans <- fun1(data=d, limit=20, graph=TRUE, data.frame=df)

are all equivalent.

In many cases arguments can be given commonly appropriate default values, in which case theymay be omitted altogether from the call when the defaults are appropriate. For example, if fun1were defined as

> fun1 <- function(data, data.frame, graph=TRUE, limit=20) { ... }

it could be called as

> ans <- fun1(d, df)

which is now equivalent to the three cases above, or as

> ans <- fun1(d, df, limit=10)

which changes one of the defaults.

It is important to note that defaults may be arbitrary expressions, even involving other argumentsto the same function; they are not restricted to be constants as in our simple example here.

Next: Assignment within functions , Previous: Named arguments and defaults , Up: Writing yourown functions

10.4 The ' ... ' argumento

Another frequent requirement is to allow one function to pass on argument settings to another.For example many graphics functions use the function par() and functions like plot() allow theuser to pass on graphical parameters to par() to control the graphical output. (See The par()function , for more details on the par() function.) This can be done by including an extraargument, literally ' ... ', of the function, which may then be passed on. An outline example isgiven below.

fun1 <- function(data, data.frame, graph=TRUE, limit=20, ...) {

[omitted statements] if (graph) par(pch="*", ...)

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

46 de 99 25/02/2011 10:36

Page 47: r Manul Port

[more omissions] }

Next: More advanced examples , Previous: The three dots argument , Up: Writing your ownfunctions

10.5 Assignments within functions

Note that any ordinary assignments done within the function are local and temporary and arelost after exit from the function . Thus the assignment X <- qr(X) does not affect the value ofthe argument in the calling program.

To understand completely the rules governing the scope of R assignments the reader needs to befamiliar with the notion of an evaluation frame . This is a somewhat advanced, though hardlydifficult, topic and is not covered further here.

If global and permanent assignments are intended within a function, then either the“superassignment” operator, <<- or the function assign() can be used. See the help documentfor details. S-PLUS users should be aware that <<- has different semantics in R. These arediscussed further in Scope .

Next: Scope , Previous: Assignment within functions , Up: Writing your own functions

10.6 More advanced examples

Efficiency factors in block designsDropping all names in a printed arrayRecursive numerical integration

Next: Dropping all names in a printed array , Previous: More advanced examples , Up: Moreadvanced examples

10.6.1 Efficiency factors in block designs

As a more complete, if a little pedestrian, example of a function, consider finding the efficiencyfactors for a block design. (Some aspects of this problem have already been discussed in Indexmatrices .)

A block design is defined by two factors, say blocks ( b levels) and varieties ( v levels). If Rand K are the v by v and b by b replications and block size matrices, respectively, and N is the bby v incidence matrix, then the efficiency factors are defined as the eigenvalues of the matrix E =I_v - R^{-1/2}N'K^{-1}NR^{-1/2} = I_v - A'A, where A = K^{-1/2}NR^{-1/2}. One way towrite the function is given below.

> bdeff <- function(blocks, varieties) {

blocks <- as.factor(blocks) # minor safety move b <- length(levels(blocks))

varieties <- as.factor(varieties) # minor safety move v <- length(levels(varieties))

K <- as.vector(table(blocks)) # remove dim attr R <- as.vector(table(varieties)) # remove dim attr N <- table(blocks, varieties) A <- 1/sqrt(K) * N * rep(1/sqrt(R), rep(b, v)) sv <- svd(A) list(eff=1 - sv$d^2, blockcv=sv$u, varietycv=sv$v) }

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

47 de 99 25/02/2011 10:36

Page 48: r Manul Port

It is numerically slightly better to work with the singular value decomposition on this occasionrather than the eigenvalue routines.

The result of the function is a list giving not only the efficiency factors as the first component, butalso the block and variety canonical contrasts, since sometimes these give additional usefulqualitative information.

Next: Recursive numerical integration , Previous: Efficiency factors in block designs , Up: Moreadvanced examples

10.6.2 Dropping all names in a printed array

For printing purposes with large matrices or arrays, it is often useful to print them in close blockform without the array names or numbers. Removing the dimnames attribute will not achieve thiseffect, but rather the array must be given a dimnames attribute consisting of empty strings. Forexample to print a matrix, X

> temp <- X > dimnames(temp) <- list(rep("", nrow(X)), rep("", ncol(X))) > temp; rm(temp)

This can be much more conveniently done using a function, no.dimnames() , shown below, as a“wrap around” to achieve the same result. It also illustrates how some effective and useful userfunctions can be quite short.

no.dimnames <- function(a) {

## Remove all dimension names from an array for compact printing. d <- list() l <- 0 for(i in dim(a)) { d[[l <- l + 1]] <- rep("", i) } dimnames(a) <- d um }

With this function defined, an array may be printed in close format using

> no.dimnames(X)

This is particularly useful for large integer arrays, where patterns are the real interest rather thanthe values.

Previous: Dropping all names in a printed array , Up: More advanced examples

10.6.3 Recursive numerical integration

Functions may be recursive, and may themselves define functions within themselves. Note,however, that such functions, or indeed variables, are not inherited by called functions in higherevaluation frames as they would be if they were on the search path.

The example below shows a naive way of performing one-dimensional numerical integration. Theintegrand is evaluated at the end points of the range and in the middle. If the one-panel trapeziumrule answer is close enough to the two panel, then the latter is returned as the value. Otherwisethe same process is recursively applied to each panel. The result is an adaptive integration processthat concentrates function evaluations in regions where the integrand is farthest from linear.There is, however, a heavy overhead, and the function is only competitive with other algorithmswhen the integrand is both smooth and very difficult to evaluate.

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

48 de 99 25/02/2011 10:36

Page 49: r Manul Port

The example is also given partly as a little puzzle in R programming.

area <- function(f, a, b, eps = 1.0e-06, lim = 10) { fun1 <- function(f, a, b, fa, fb, a0, eps, lim, fun) {

## function `fun1' is only visible inside `area' d <- (a + b)/2 h <- (b - a)/4 fd <- f(d) a1 <- h * (fa + fd) a2 <- h * (fd + fb) if(abs(a0 - a1 - a2) < eps || lim == 0) return(a1 + a2) else { return(fun(f, a, d, fa, fd, a1, eps, lim - 1, fun) + fun(f, d, b, fd, fb, a2, eps, lim - 1, fun)) } } fa <- f(a) fb <- f(b) a0 <- ((fa + fb) * (b - a))/2 fun1(f, a, b, fa, fb, a0, eps, lim, fun1) }

ÂmbitoObject orientation

Next: Customizing the environment , Previous: More advanced examples , Up: Writing your ownfunctions

10.7 Scope

The discussion in this section is somewhat more technical than in other parts of this document.However, it details one of the major differences between S-PLUS and R.

The symbols which occur in the body of a function can be divided into three classes; formalparameters, local variables and free variables. The formal parameters of a function are thoseoccurring in the argument list of the function. Their values are determined by the process ofbinding the actual function arguments to the formal parameters. Local variables are those whosevalues are determined by the evaluation of expressions in the body of the functions. Variableswhich are not formal parameters or local variables are called free variables. Free variablesbecome local variables if they are assigned to. Consider the following function definition.

f <- function(x) { y <- 2*x print(x) print(y) print(z) }

In this function, x is a formal parameter, y is a local variable and z is a free variable.

In R the free variable bindings are resolved by first looking in the environment in which thefunction was created. This is called lexical scope . First we define a function called cube .

cube <- function(n) { sq <- function() n*n n*sq() }

The variable n in the function sq is not an argument to that function. Therefore it is a freevariable and the scoping rules must be used to ascertain the value that is to be associated with it.Under static scope ( S-PLUS ) the value is that associated with a global variable named n . Under

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

49 de 99 25/02/2011 10:36

Page 50: r Manul Port

lexical scope (R) it is the parameter to the function cube since that is the active binding for thevariable n at the time the function sq was defined. The difference between evaluation in R andevaluation in S-PLUS is that S-PLUS looks for a global variable called n while R first looks for avariable called n in the environment created when cube was invoked.

## first evaluation in S S> cube(2) Error in sq(): Object "n" not found Largaram S> n <- 3 S> cube(2) [1] 18

## then the same function evaluated in R R> cube(2) [1] 8

Lexical scope can also be used to give functions mutable state . In the following example weshow how R can be used to mimic a bank account. A functioning bank account needs to have abalance or total, a function for making withdrawals, a function for making deposits and a functionfor stating the current balance. We achieve this by creating the three functions within accountand then returning a list containing them. When account is invoked it takes a numerical argumenttotal and returns a list containing the three functions. Because these functions are defined in anenvironment which contains total , they will have access to its value.

The special assignment operator, <<- , is used to change the value associated with total . Thisoperator looks back in enclosing environments for an environment that contains the symboltotal and when it finds such an environment it replaces the value, in that environment, with thevalue of right hand side. If the global or top-level environment is reached without finding thesymbol total then that variable is created and assigned to there. For most users <<- creates a

global variable and assigns the value of the right hand side to it 21 . Only when <<- has been usedin a function that was returned as the value of another function will the special behaviordescribed here occur.

open.account <- function(total) { list( deposit = function(amount) { if(amount <= 0) stop("Deposits must be positive!\n") total <<- total + amount cat(amount, "deposited. Your balance is", total, "\n\n") } withdraw = function(amount) { if(amount > total) stop("You don't have that much money!\n") total <<- total - amount cat(amount, "withdrawn. Your balance is", total, "\n\n") } balance = function() { cat("Your balance is", total, "\n\n") } ) } ross <- open.account(100) robert <- open.account(200) ross$withdraw(30) ross$balance() robert$balance() ross$deposit(50) ross$balance() ross$withdraw(500)

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

50 de 99 25/02/2011 10:36

Page 51: r Manul Port

Next: Object orientation , Previous: Scope , Up: Writing your own functions

10.8 Customizing the environment

Users can customize their environment in several different ways. There is a site initialization fileand every directory can have its own special initialization file. Finally, the special functions.First and .Last can be used.

The location of the site initialization file is taken from the value of the R_PROFILE environmentvariable. If that variable is unset, the file Rprofile.site in the R home subdirectory etc is used.This file should contain the commands that you want to execute every time R is started under

your system. A second, personal, profile file named .Rprofile 22 can be placed in any directory.If R is invoked in that directory then that file will be sourced. This file gives individual userscontrol over their workspace and allows for different startup procedures in different workingdirectories. If no .Rprofile file is found in the startup directory, then R looks for a .Rprofilefile in the user's home directory and uses that (if it exists). If the environment variableR_PROFILE_USER is set, the file it points to is used instead of the .Rprofile files.

Any function named .First() in either of the two profile files or in the .RData image has aspecial status. It is automatically performed at the beginning of an R session and may be used toinitialize the environment. For example, the definition in the example below alters the prompt to $and sets up various other useful things that can then be taken for granted in the rest of the session.

Thus, the sequence in which files are executed is, Rprofile.site , the user profile, .RData andthen .First() . A definition in later files will mask definitions in earlier files.

> .First <- function() {

options(prompt="$ ", continue="+\t") # $ is the prompt options(digits=5, length=999) # custom numbers and printout x11() # for graphics par(pch = "+") # plotting character source(file.path(Sys.getenv("HOME"), "R", "mystuff.R"))

# my personal functions library(MASS) # attach a package }

Similarly a function .Last() , if defined, is (normally) executed at the very end of the session.An example is given below.

> .Last <- function() {

graphics.off() # a small safety measure. cat(paste(date(),"\nAdios\n")) # Is it time for lunch? }

Previous: Customizing the environment , Up: Writing your own functions

10.9 Classes, generic functions and object orientation

The class of an object determines how it will be treated by what are known as generic functions.Put the other way round, a generic function performs a task or action on its arguments specific tothe class of the argument itself . If the argument lacks any class attribute, or has a class notcatered for specifically by the generic function in question, there is always a default actionprovided.

An example makes things clearer. The class mechanism offers the user the facility of designingand writing generic functions for special purposes. Among the other generic functions are plot()

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

51 de 99 25/02/2011 10:36

Page 52: r Manul Port

for displaying objects graphically, summary() for summarizing analyses of various types, andanova() for comparing statistical models.

The number of generic functions that can treat a class in a specific way can be quite large. Forexample, the functions that can accommodate in some fashion objects of class "data.frame"include

[ [[<- any as.matrix [<- mean plot summary

A currently complete list can be got by using the methods() function:

> methods(class="data.frame")

Conversely the number of classes a generic function can handle can also be quite large. Forexample the plot() function has a default method and variants for objects of classes"data.frame" , "density" , "factor" , and more. A complete list can be got again by using themethods() function:

> methods(plot)

For many generic functions the function body is quite short, for example

> coef function (object, ...) UseMethod("coef")

The presence of UseMethod indicates this is a generic function. To see what methods are availablewe can use methods()

> methods(coef) [1] coef.aov* coef.Arima* coef.default* coef.listof* [5] coef.nls* coef.summary.nls* Non-visible functions are asterisked

In this example there are six methods, none of which can be seen by typing its name. We can readthese by either of

> getAnywhere("coef.aov") A single object matching 'coef.aov' was found It was found in the following places registered S3 method for coef from namespace stats namespace:stats com valor function (object, ...) { z <- object$coef z[!is.na(z)] } > getS3method("coef", "aov") function (object, ...) { z <- object$coef z[!is.na(z)] }

The reader is referred to the R Language Definition for a more complete discussion of thismechanism.

Next: Graphics , Previous: Writing your own functions , Up: Top

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

52 de 99 25/02/2011 10:36

Page 53: r Manul Port

11 Statistical models in R

This section presumes the reader has some familiarity with statistical methodology, in particularwith regression analysis and the analysis of variance. Later we make some rather more ambitiouspresumptions, namely that something is known about generalized linear models and nonlinearregression.

The requirements for fitting statistical models are sufficiently well defined to make it possible toconstruct general tools that apply in a broad spectrum of problems.

R provides an interlocking suite of facilities that make fitting statistical models very simple. As wemention in the introduction, the basic output is minimal, and one needs to ask for the details bycalling extractor functions.

Formulae for statistical modelsLinear modelsGeneric functions for extracting model informationAnalysis of variance and model comparisonUpdating fitted modelsGeneralized linear modelsNonlinear least squares and maximum likelihood modelsSome non-standard models

Next: Linear models , Previous: Statistical models in R , Up: Statistical models in R

11.1 Defining statistical models; formulae

The template for a statistical model is a linear regression model with independent, homoscedasticerrors

y_i = sum_{j=0}^p beta_j x_{ij} + e_i, i = 1, ... , n,

where the e_i are NID(0, sigma^2). In matrix terms this would be written

y = X beta + e

where the y is the response vector, X is the model matrix or design matrix and has columns x_0,x_1, ... , x_p, the determining variables. Very often x_0 will be a column of ones defining anintercept term.

Exemplos

Before giving a formal specification, a few examples may usefully set the picture.

Suppose y , x , x0 , x1 , x2 , ... are numeric variables, X is a matrix and A , B , C , ... are factors. Thefollowing formulae on the left side below specify statistical models as described on the right.

y ~ x

y ~ 1 + x

Both imply the same simple linear regression model of y on x. The first has an implicitintercept term, and the second an explicit one.

y ~ 0 + x

y ~ -1 + x

y ~ x - 1

Simple linear regression of y on x through the origin (that is, without an intercept term).

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

53 de 99 25/02/2011 10:36

Page 54: r Manul Port

log(y) ~ x1 + x2

Multiple regression of the transformed variable, log(y), on x1 and x2 (with an implicitintercept term).

y ~ poly(x,2)

y ~ 1 + x + I(x^2)

Polynomial regression of y on x of degree 2. The first form uses orthogonal polynomials,and the second uses explicit powers, as basis.

y ~ X + poly(x,2)

Multiple regression y with model matrix consisting of the matrix X as well as polynomialterms in x to degree 2.

y ~ A

Single classification analysis of variance model of y, with classes determined by A.y ~ A + x

Single classification analysis of covariance model of y, with classes determined by A, andwith covariate x.

y ~ A*B

y ~ A + B + A:B

y ~ B %in% A

y ~ A/B

Two factor non-additive model of y on A and B. The first two specify the same crossedclassification and the second two specify the same nested classification. In abstract termsall four specify the same model subspace.

y ~ (A + B + C)^2

y ~ A*B*C - A:B:C

Three factor experiment but with a model containing main effects and two factorinteractions only. Both formulae specify the same model.

y ~ A * x

y ~ A/x

y ~ A/(1 + x) - 1

Separate simple linear regression models of y on x within the levels of A, with differentcodings. The last form produces explicit estimates of as many different intercepts andslopes as there are levels in A.

y ~ A*B + Error(C)

An experiment with two treatment factors, A and B, and error strata determined by factorC. For example a split plot experiment, with whole plots (and hence also subplots),determined by factor C.

The operator ~ is used to define a model formula in R. The form, for an ordinary linear model, is

response ~ op_1 term_1 op_2 term_2 op_3 term_3 ...

onde

respostais a vector or matrix, (or expression evaluating to a vector or matrix) defining the responsevariable(s).

op_iis an operator, either + or - , implying the inclusion or exclusion of a term in the model, (thefirst is optional).

term_iis either

a vector or matrix expression, or 1 ,a factor, ora formula expression consisting of factors, vectors or matrices connected by formulaoperators .

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

54 de 99 25/02/2011 10:36

Page 55: r Manul Port

In all cases each term defines a collection of columns either to be added to or removedfrom the model matrix. A 1 stands for an intercept column and is by default included in themodel matrix unless explicitly removed.

The formula operators are similar in effect to the Wilkinson and Rogers notation used by suchprograms as Glim and Genstat. One inevitable change is that the operator ' . ' becomes ' : ' sincethe period is a valid name character in R.

The notation is summarized below (based on Chambers & Hastie, 1992, p.29):

Y ~ MY is modeled as M .

M_1 + M_2Include M_1 and M_2 .

M_1 - M_2Include M_1 leaving out terms of M_2 .

M_1 : M_2The tensor product of M_1 and M_2 . If both terms are factors, then the “subclasses”factor.

M_1 %in% M_2Similar to M_1 : M_2 , but with a different coding.

M_1 * M_2M_1 + M_2 + M_1 : M_2 .

M_1 / M_2M_1 + M_2 %in% M_1 .

M ^ nAll terms in M together with “interactions” up to order n

I( M )Insulate M . Inside M all operators have their normal arithmetic meaning, and that termappears in the model matrix.

Note that inside the parentheses that usually enclose function arguments all operators have theirnormal arithmetic meaning. The function I() is an identity function used to allow terms in modelformulae to be defined using arithmetic operators.

Note particularly that the model formulae specify the columns of the model matrix , thespecification of the parameters being implicit. This is not the case in other contexts, for examplein specifying nonlinear models.

Contrasts

Previous: Formulae for statistical models , Up: Formulae for statistical models

11.1.1 Contrasts

We need at least some idea how the model formulae specify the columns of the model matrix.This is easy if we have continuous variables, as each provides one column of the model matrix(and the intercept will provide a column of ones if included in the model).

What about a k-level factor A ? The answer differs for unordered and ordered factors. Forunordered factors k - 1 columns are generated for the indicators of the second, ... , kth levels ofthe factor. (Thus the implicit parameterization is to contrast the response at each level with that atthe first.) For ordered factors the k - 1 columns are the orthogonal polynomials on 1, ... , k,omitting the constant term.

Although the answer is already complicated, it is not the whole story. First, if the intercept is

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

55 de 99 25/02/2011 10:36

Page 56: r Manul Port

omitted in a model that contains a factor term, the first such term is encoded into k columnsgiving the indicators for all the levels. Second, the whole behavior can be changed by theoptions setting for contrasts . The default setting in R is

options(contrasts = c("contr.treatment", "contr.poly"))

The main reason for mentioning this is that R and S have different defaults for unordered factors,S using Helmert contrasts. So if you need to compare your results to those of a textbook or paperwhich used S-PLUS , you will need to set

options(contrasts = c("contr.helmert", "contr.poly"))

This is a deliberate difference, as treatment contrasts (R's default) are thought easier fornewcomers to interpret.

We have still not finished, as the contrast scheme to be used can be set for each term in the modelusing the functions contrasts and C . We have not yet considered interaction terms: thesegenerate the products of the columns introduced for their component terms.

Although the details are complicated, model formulae in R will normally generate the models thatan expert statistician would expect, provided that marginality is preserved. Fitting, for example, amodel with an interaction but not the corresponding main effects will in general lead to surprisingresults, and is for experts only.

Next: Generic functions for extracting model information , Previous: Formulae for statisticalmodels , Up: Statistical models in R

11.2 Linear models

The basic function for fitting ordinary multiple models is lm() , and a streamlined version of thecall is as follows:

> fitted.model <- lm( formula , data = data.frame )

Por exemplo

> fm2 <- lm(y ~ x1 + x2, data = production)

would fit a multiple regression model of y on x1 and x2 (with implicit intercept term).

The important (but technically optional) parameter data = production specifies that anyvariables needed to construct the model should come first from the production data frame . Thisis the case regardless of whether data frame production has been attached on the search pathor not .

Next: Analysis of variance and model comparison , Previous: Linear models , Up: Statisticalmodels in R

11.3 Generic functions for extracting model information

The value of lm() is a fitted model object; technically a list of results of class "lm" . Informationabout the fitted model can then be displayed, extracted, plotted and so on by using genericfunctions that orient themselves to objects of class "lm" . Estes incluem

add1 deviance formula predict step alias drop1 kappa print summary anova effects labels proj vcov coef family plot residuals

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

56 de 99 25/02/2011 10:36

Page 57: r Manul Port

A brief description of the most commonly used ones is given below.

anova( object_1 , object_2 )Compare a submodel with an outer model and produce an analysis of variance table.

coef( object )Extract the regression coefficient (matrix).

Long form: coefficients( object ) .

deviance( object )Residual sum of squares, weighted if appropriate.

formula( object )Extract the model formula.

plot( object )Produce four plots, showing residuals, fitted values and some diagnostics.

predict( object , newdata= data.frame )The data frame supplied must have variables specified with the same labels as the original.The value is a vector or matrix of predicted values corresponding to the determiningvariable values in data.frame .

print( object )Print a concise version of the object. Most often used implicitly.

residuals( object )Extract the (matrix of) residuals, weighted as appropriate.

Short form: resid( object ) .

step( object )Select a suitable model by adding or dropping terms and preserving hierarchies. The modelwith the smallest value of AIC (Akaike's An Information Criterion) discovered in thestepwise search is returned.

summary( object )Print a comprehensive summary of the results of the regression analysis.

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

57 de 99 25/02/2011 10:36

Page 58: r Manul Port

vcov( object )Returns the variance-covariance matrix of the main parameters of a fitted model object.

Next: Updating fitted models , Previous: Generic functions for extracting model information , Up:Statistical models in R

11.4 Analysis of variance and model comparison

The model fitting function aov(formula, data= data.frame ) operates at the simplest level in avery similar way to the function lm() , and most of the generic functions listed in the table inGeneric functions for extracting model information apply.

It should be noted that in addition aov() allows an analysis of models with multiple error stratasuch as split plot experiments, or balanced incomplete block designs with recovery of inter-blockinformation. The model formula

response ~ mean.formula + Error( strata.formula )

specifies a multi-stratum experiment with error strata defined by the strata.formula . In thesimplest case, strata.formula is simply a factor, when it defines a two strata experiment, namelybetween and within the levels of the factor.

For example, with all determining variables factors, a model formula such as that in:

> fm <- aov(yield ~ v + n*p*k + Error(farms/blocks), data=farm.data)

would typically be used to describe an experiment with mean model v + n*p*k and three errorstrata, namely “between farms”, “within farms, between blocks” and “within blocks”.

ANOVA tables

Previous: Analysis of variance and model comparison , Up: Analysis of variance and modelcomparison

11.4.1 ANOVA tables

Note also that the analysis of variance table (or tables) are for a sequence of fitted models. Thesums of squares shown are the decrease in the residual sums of squares resulting from aninclusion of that term in the model at that place in the sequence. Hence only for orthogonalexperiments will the order of inclusion be inconsequential.

For multistratum experiments the procedure is first to project the response onto the error strata,again in sequence, and to fit the mean model to each projection. For further details, see Chambers& Hastie (1992).

A more flexible alternative to the default full ANOVA table is to compare two or more modelsdirectly using the anova() function.

> anova( fitted.model.1 , fitted.model.2 , ...)

The display is then an ANOVA table showing the differences between the fitted models whenfitted in sequence. The fitted models being compared would usually be an hierarchical sequence,of course. This does not give different information to the default, but rather makes it easier tocomprehend and control.

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

58 de 99 25/02/2011 10:36

Page 59: r Manul Port

Next: Generalized linear models , Previous: Analysis of variance and model comparison , Up:Statistical models in R

11.5 Updating fitted models

The update() function is largely a convenience function that allows a model to be fitted thatdiffers from one previously fitted usually by just a few additional or removed terms. Its form is

> new.model <- update( old.model , new.formula )

In the new.formula the special name consisting of a period, ' . ', only, can be used to stand for“the corresponding part of the old model formula”. Por exemplo,

> fm05 <- lm(y ~ x1 + x2 + x3 + x4 + x5, data = production) > fm6 <- update(fm05, . ~ . + x6) > smf6 <- update(fm6, sqrt(.) ~ .)

would fit a five variate multiple regression with variables (presumably) from the data frameproduction , fit an additional model including a sixth regressor variable, and fit a variant on themodel where the response had a square root transform applied.

Note especially that if the data= argument is specified on the original call to the model fittingfunction, this information is passed on through the fitted model object to update() and its allies.

The name ' . ' can also be used in other contexts, but with slightly different meaning. Por exemplo

> fmfull <- lm(y ~ . , data = production)

would fit a model with response y and regressor variables all other variables in the data frameproduction .

Other functions for exploring incremental sequences of models are add1() , drop1() and step(). The names of these give a good clue to their purpose, but for full details see the on-line help.

Next: Nonlinear least squares and maximum likelihood models , Previous: Updating fitted models, Up: Statistical models in R

11.6 Generalized linear models

Generalized linear modeling is a development of linear models to accommodate both non-normalresponse distributions and transformations to linearity in a clean and straightforward way. Ageneralized linear model may be described in terms of the following sequence of assumptions:

There is a response, y, of interest and stimulus variables x_1, x_2, ... , whose valuesinfluence the distribution of the response.The stimulus variables influence the distribution of y through a single linear function, only. This linear function is called the linear predictor , and is usually written

eta = beta_1 x_1 + beta_2 x_2 + ... + beta_p x_p,

hence x_i has no influence on the distribution of y if and only if beta_i is zero.

The distribution of y is of the form

f_Y(y; mu, phi) = exp((A/phi) * (y lambda(mu) - gamma(lambda(mu))) + tau(y, phi))

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

59 de 99 25/02/2011 10:36

Page 60: r Manul Port

where phi is a scale parameter (possibly known), and is constant for all observations, Arepresents a prior weight, assumed known but possibly varying with the observations, and$\mu$ is the mean of y. So it is assumed that the distribution of y is determined by its meanand possibly a scale parameter as well.

The mean, mu, is a smooth invertible function of the linear predictor:

mu = m(eta), eta = m^{-1}(mu) = ell(mu)

and this inverse function, ell(), is called the link function .

These assumptions are loose enough to encompass a wide class of models useful in statisticalpractice, but tight enough to allow the development of a unified methodology of estimation andinference, at least approximately. The reader is referred to any of the current reference works onthe subject for full details, such as McCullagh & Nelder (1989) or Dobson (1990).

FamíliasThe glm() function

Next: The glm() function , Previous: Generalized linear models , Up: Generalized linear models

11.6.1 Families

The class of generalized linear models handled by facilities supplied in R includes gaussian ,binomial , poisson , inverse gaussian and gamma response distributions and also quasi-likelihoodmodels where the response distribution is not explicitly specified. In the latter case the variancefunction must be specified as a function of the mean, but in other cases this function is implied bythe response distribution.

Each response distribution admits a variety of link functions to connect the mean with the linearpredictor. Those automatically available are shown in the following table:

Nome de Família Link functions

binomial logit , probit , log , clogloggaussian identity , log , inverseGamma identity , inverse , loginverse.gaussian 1/mu^2 , identity , inverse , logpoisson identity , log , sqrtquasi logit , probit , cloglog , identity , inverse , log ,

1/mu^2 , sqrt

The combination of a response distribution, a link function and various other pieces ofinformation that are needed to carry out the modeling exercise is called the family of thegeneralized linear model.

Previous: Families , Up: Generalized linear models

11.6.2 The glm() function

Since the distribution of the response depends on the stimulus variables through a single linearfunction only , the same mechanism as was used for linear models can still be used to specify thelinear part of a generalized model. The family has to be specified in a different way.

The R function to fit a generalized linear model is glm() which uses the form

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

60 de 99 25/02/2011 10:36

Page 61: r Manul Port

> fitted.model <- glm( formula , family= family.generator , data= data.frame )

The only new feature is the family.generator , which is the instrument by which the family isdescribed. It is the name of a function that generates a list of functions and expressions thattogether define and control the model and estimation process. Although this may seem a littlecomplicated at first sight, its use is quite simple.

The names of the standard, supplied family generators are given under “Family Name” in thetable in Families . Where there is a choice of links, the name of the link may also be supplied withthe family name, in parentheses as a parameter. In the case of the quasi family, the variancefunction may also be specified in this way.

Some examples make the process clear.

The gaussian family

A call such as

> fm <- glm(y ~ x1 + x2, family = gaussian, data = sales)

achieves the same result as

> fm <- lm(y ~ x1+x2, data=sales)

but much less efficiently. Note how the gaussian family is not automatically provided with achoice of links, so no parameter is allowed. If a problem requires a gaussian family with anonstandard link, this can usually be achieved through the quasi family, as we shall see later.

The binomial family

Consider a small, artificial example, from Silvey (1970).

On the Aegean island of Kalythos the male inhabitants suffer from a congenital eye disease, theeffects of which become more marked with increasing age. Samples of islander males of variousages were tested for blindness and the results recorded. The data is shown below:

Idade: 20 35 45 55 70

No. tested: 50 50 50 50 50

No. blind: 6 17 26 37 44

The problem we consider is to fit both logistic and probit models to this data, and to estimate foreach model the LD50, that is the age at which the chance of blindness for a male inhabitant is50%.

If y is the number of blind at age x and n the number tested, both models have the form y ~ B(n,F(beta_0 + beta_1 x)) where for the probit case, F(z) = Phi(z) is the standard normal distributionfunction, and in the logit case (the default), F(z) = e^z/(1+e^z). In both cases the LD50 is LD50 =- beta_0/beta_1 that is, the point at which the argument of the distribution function is zero.

The first step is to set the data up as a data frame

> kalythos <- data.frame(x = c(20,35,45,55,70), n = rep(50,5), y = c(6,17,26,37,44))

To fit a binomial model using glm() there are three possibilities for the response:

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

61 de 99 25/02/2011 10:36

Page 62: r Manul Port

If the response is a vector it is assumed to hold binary data, and so must be a 0/1 vector.If the response is a two-column matrix it is assumed that the first column holds the numberof successes for the trial and the second holds the number of failures.If the response is a factor , its first level is taken as failure (0) and all other levels as`success' (1).

Here we need the second of these conventions, so we add a matrix to our data frame:

> kalythos$Ymat <- cbind(kalythos$y, kalythos$n - kalythos$y)

To fit the models we use

> fmp <- glm(Ymat ~ x, family = binomial(link=probit), data = kalythos) > fml <- glm(Ymat ~ x, family = binomial, data = kalythos)

Since the logit link is the default the parameter may be omitted on the second call. To see theresults of each fit we could use

> summary(fmp) > summary(fml)

Both models fit (all too) well. To find the LD50 estimate we can use a simple function:

> ld50 <- function(b) -b[1]/b[2] > ldp <- ld50(coef(fmp)); ldl <- ld50(coef(fml)); c(ldp, ldl)

The actual estimates from this data are 43.663 years and 43.601 years respectively.

Poisson models

With the Poisson family the default link is the log , and in practice the major use of this family isto fit surrogate Poisson log-linear models to frequency data, whose actual distribution is oftenmultinomial. This is a large and important subject we will not discuss further here. It even forms amajor part of the use of non-gaussian generalized models overall.

Occasionally genuinely Poisson data arises in practice and in the past it was often analyzed asgaussian data after either a log or a square-root transformation. As a graceful alternative to thelatter, a Poisson generalized linear model may be fitted as in the following example:

> fmod <- glm(y ~ A + B + x, family = poisson(link=sqrt), data = worm.counts)

Quasi-likelihood models

For all families the variance of the response will depend on the mean and will have the scaleparameter as a multiplier. The form of dependence of the variance on the mean is a characteristicof the response distribution; for example for the poisson distribution Var(y) = mu.

For quasi-likelihood estimation and inference the precise response distribution is not specified,but rather only a link function and the form of the variance function as it depends on the mean.Since quasi-likelihood estimation uses formally identical techniques to those for the gaussiandistribution, this family provides a way of fitting gaussian models with non-standard link functionsor variance functions, incidentally.

For example, consider fitting the non-linear regression y = theta_1 z_1 / (z_2 - theta_2) + e whichmay be written alternatively as y = 1 / (beta_1 x_1 + beta_2 x_2) + e where x_1 = z_2/z_1, x_2 =-1/z_1, beta_1 = 1/theta_1, and beta_2 = theta_2/theta_1. Supposing a suitable data frame to beset up we could fit this non-linear regression as

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

62 de 99 25/02/2011 10:36

Page 63: r Manul Port

> nlfit <- glm(y ~ x1 + x2 - 1, family = quasi(link=inverse, variance=constant), data = biochem)

The reader is referred to the manual and the help document for further information, as needed.

Next: Some non-standard models , Previous: Generalized linear models , Up: Statistical models inR

11.7 Nonlinear least squares and maximum likelihood models

Certain forms of nonlinear model can be fitted by Generalized Linear Models ( glm() ). But inthe majority of cases we have to approach the nonlinear curve fitting problem as one of nonlinearoptimization. R's nonlinear optimization routines are optim() , nlm() and (from R 2.2.0)nlminb() , which provide the functionality (and more) of S-PLUS 's ms() and nlminb() . Weseek the parameter values that minimize some index of lack-of-fit, and they do this by trying outvarious parameter values iteratively. Unlike linear regression for example, there is no guaranteethat the procedure will converge on satisfactory estimates. All the methods require initial guessesabout what parameter values to try, and convergence may depend critically upon the quality ofthe starting values.

Mínimos quadradosMaximum likelihood

Next: Maximum likelihood , Previous: Nonlinear least squares and maximum likelihood models ,Up: Nonlinear least squares and maximum likelihood models

11.7.1 Least squares

One way to fit a nonlinear model is by minimizing the sum of the squared errors (SSE) orresiduals. This method makes sense if the observed errors could have plausibly arisen from anormal distribution.

Here is an example from Bates & Watts (1988), page 51. The data are:

> x <- c(0.02, 0.02, 0.06, 0.06, 0.11, 0.11, 0.22, 0.22, 0.56, 0.56, 1.10, 1.10) > y <- c(76, 47, 97, 107, 123, 139, 159, 152, 191, 201, 207, 200)

The fit criterion to be minimized is:

> fn <- function(p) sum((y - (p[1] * x)/(p[2] + x))^2)

In order to do the fit we need initial estimates of the parameters. One way to find sensible startingvalues is to plot the data, guess some parameter values, and superimpose the model curve usingthose values.

> plot(x, y) > xfit <- seq(.02, 1.1, .05) > yfit <- 200 * xfit/(0.1 + xfit) > lines(spline(xfit, yfit))

We could do better, but these starting values of 200 and 0.1 seem adequate. Now do the fit:

> out <- nlm(fn, p = c(200, 0.1), hessian = TRUE)

After the fitting, out$minimum is the SSE, and out$estimate are the least squares estimates ofthe parameters. To obtain the approximate standard errors (SE) of the estimates we do:

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

63 de 99 25/02/2011 10:36

Page 64: r Manul Port

> sqrt(diag(2*out$minimum/(length(y) - 2) * solve(out$hessian)))

The 2 in the line above represents the number of parameters. A 95% confidence interval would bethe parameter estimate +/- 1.96 SE. We can superimpose the least squares fit on a new plot:

> plot(x, y) > xfit <- seq(.02, 1.1, .05) > yfit <- 212.68384222 * xfit/(0.06412146 + xfit) > lines(spline(xfit, yfit))

The standard package stats provides much more extensive facilities for fitting non-linear modelsby least squares. The model we have just fitted is the Michaelis-Menten model, so we can use

> df <- data.frame(x=x, y=y) > fit <- nls(y ~ SSmicmen(x, Vm, K), df) > fit Nonlinear regression model model: y ~ SSmicmen(x, Vm, K) data: df Vm K 212.68370711 0.06412123 residual sum-of-squares: 1195.449 > summary(fit) Formula: y ~ SSmicmen(x, Vm, K) Parâmetros: Estimate Std. Error t value Pr(>|t|) Vm 2.127e+02 6.947e+00 30.615 3.24e-11 K 6.412e-02 8.281e-03 7.743 1.57e-05 Residual standard error: 10.93 on 10 degrees of freedom Correlation of Parameter Estimates: Vm K 0.7651

Previous: Least squares , Up: Nonlinear least squares and maximum likelihood models

11.7.2 Maximum likelihood

Maximum likelihood is a method of nonlinear model fitting that applies even if the errors are notnormal. The method finds the parameter values which maximize the log likelihood, orequivalently which minimize the negative log-likelihood. Here is an example from Dobson (1990),pp. 108–111. This example fits a logistic model to dose-response data, which clearly could also befit by glm() . The data are:

> x <- c(1.6907, 1.7242, 1.7552, 1.7842, 1.8113, 1.8369, 1.8610, 1.8839) > y <- c( 6, 13, 18, 28, 52, 53, 61, 60) > n <- c(59, 60, 62, 56, 63, 59, 62, 60)

The negative log-likelihood to minimize is:

> fn <- function(p) sum( - (y*(p[1]+p[2]*x) - n*log(1+exp(p[1]+p[2]*x)) + log(choose(n, y)) ))

We pick sensible starting values and do the fit:

> out <- nlm(fn, p = c(-50,20), hessian = TRUE)

After the fitting, out$minimum is the negative log-likelihood, and out$estimate are themaximum likelihood estimates of the parameters. To obtain the approximate SEs of the estimates

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

64 de 99 25/02/2011 10:36

Page 65: r Manul Port

we do:

> sqrt(diag(solve(out$hessian)))

A 95% confidence interval would be the parameter estimate +/- 1.96 SE.

Previous: Nonlinear least squares and maximum likelihood models , Up: Statistical models in R

11.8 Some non-standard models

We conclude this chapter with just a brief mention of some of the other facilities available in Rfor special regression and data analysis problems.

Mixed models. The recommended nlme package provides functions lme() and nlme() forlinear and non-linear mixed-effects models, that is linear and non-linear regressions inwhich some of the coefficients correspond to random effects. These functions make heavyuse of formulae to specify the models.Local approximating regressions. The loess() function fits a nonparametric regressionby using a locally weighted regression. Such regressions are useful for highlighting a trendin messy data or for data reduction to give some insight into a large data set.

Function loess is in the standard package stats , together with code for projection pursuitregression.

Robust regression. There are several functions available for fitting regression models in away resistant to the influence of extreme outliers in the data. Function lqs in therecommended package MASS provides state-of-art algorithms for highly-resistant fits. Lessresistant but statistically more efficient methods are available in packages, for examplefunction rlm in package MASS .Additive models. This technique aims to construct a regression function from smoothadditive functions of the determining variables, usually one for each determining variable.Functions avas and ace in package acepack and functions bruto and mars in packagemda provide some examples of these techniques in user-contributed packages to R. Anextension is Generalized Additive Models , implemented in user-contributed packagesgam and mgcv .Tree-based models. Rather than seek an explicit global linear model for prediction orinterpretation, tree-based models seek to bifurcate the data, recursively, at critical points ofthe determining variables in order to partition the data ultimately into groups that are ashomogeneous as possible within, and as heterogeneous as possible between. The resultsoften lead to insights that other data analysis methods tend not to yield.

Models are again specified in the ordinary linear model form. The model fitting function istree() , but many other generic functions such as plot() and text() are well adapted todisplaying the results of a tree-based model fit in a graphical way.

Tree models are available in R via the user-contributed packages rpart and tree .

Next: Packages , Previous: Statistical models in R , Up: Top

12 Graphical procedures

Graphical facilities are an important and extremely versatile component of the R environment. Itis possible to use the facilities to display a wide variety of statistical graphs and also to buildentirely new types of graph.

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

65 de 99 25/02/2011 10:36

Page 66: r Manul Port

The graphics facilities can be used in both interactive and batch modes, but in most cases,interactive use is more productive. Interactive use is also easy because at startup time R initiates agraphics device driver which opens a special graphics window for the display of interactivegraphics. Although this is done automatically, it is useful to know that the command used is X11()under UNIX, windows() under Windows and quartz() under Mac OS X.

Once the device driver is running, R plotting commands can be used to produce a variety ofgraphical displays and to create entirely new kinds of display.

Plotting commands are divided into three basic groups:

High-level plotting functions create a new plot on the graphics device, possibly with axes,labels, titles and so on.Low-level plotting functions add more information to an existing plot, such as extra points,lines and labels.Interactive graphics functions allow you interactively add information to, or extractinformation from, an existing plot, using a pointing device such as a mouse.

In addition, R maintains a list of graphical parameters which can be manipulated to customizeyour plots.

This manual only describes what are known as `base' graphics. A separate graphics sub-system inpackage grid coexists with base – it is more powerful but harder to use. There is a recommendedpackage lattice which builds on grid and provides ways to produce multi-panel plots akin tothose in the Trellis system in S.

High-level plotting commandsLow-level plotting commandsInteracting with graphicsUsing graphics parametersGraphics parametersOs drivers de dispositivoDynamic graphics

Next: Low-level plotting commands , Previous: Graphics , Up: Graphics

12.1 High-level plotting commands

High-level plotting functions are designed to generate a complete plot of the data passed asarguments to the function. Where appropriate, axes, labels and titles are automatically generated(unless you request otherwise.) High-level plotting commands always start a new plot, erasing thecurrent plot if necessary.

The plot() functionDisplaying multivariate dataDisplay graphicsArguments to high-level plotting functions

Next: Displaying multivariate data , Previous: High-level plotting commands , Up: High-levelplotting commands

12.1.1 The plot() function

One of the most frequently used plotting functions in R is the plot() function. This is a genericfunction: the type of plot produced is dependent on the type or class of the first argument.

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

66 de 99 25/02/2011 10:36

Page 67: r Manul Port

plot( x , y )plot( xy )

If x and y are vectors, plot( x , y ) produces a scatterplot of y against x . The same effectcan be produced by supplying one argument (second form) as either a list containing twoelements x and y or a two-column matrix.

plot( x )If x is a time series, this produces a time-series plot. If x is a numeric vector, it produces aplot of the values in the vector against their index in the vector. If x is a complex vector, itproduces a plot of imaginary versus real parts of the vector elements.

plot( f )plot( f , y )

f is a factor object, y is a numeric vector. The first form generates a bar plot of f ; thesecond form produces boxplots of y for each level of f .

plot( df )plot(~ expr )plot( y ~ expr )

df is a data frame, y is any object, expr is a list of object names separated by ` + ' (eg, a + b+ c ). The first two forms produce distributional plots of the variables in a data frame (firstform) or of a number of named objects (second form). The third form plots y against everyobject named in expr .

Next: Display graphics , Previous: The plot() function , Up: High-level plotting commands

12.1.2 Displaying multivariate data

R provides two very useful functions for representing multivariate data. If X is a numeric matrixor data frame, the command

> pairs(X)

produces a pairwise scatterplot matrix of the variables defined by the columns of X , that is, everycolumn of X is plotted against every other column of X and the resulting n(n-1) plots are arrangedin a matrix with plot scales constant over the rows and columns of the matrix.

When three or four variables are involved a coplot may be more enlightening. If a and b arenumeric vectors and c is a numeric vector or factor object (all of the same length), then thecommand

> coplot(a ~ b | c)

produces a number of scatterplots of a against b for given values of c . If c is a factor, this simplymeans that a is plotted against b for every level of c . When c is numeric, it is divided into anumber of conditioning intervals and for each interval a is plotted against b for values of c withinthe interval. The number and position of intervals can be controlled with given.values=argument to coplot() —the function co.intervals() is useful for selecting intervals. You canalso use two given variables with a command like

> coplot(a ~ b | c + d)

which produces scatterplots of a against b for every joint conditioning interval of c and d .

The coplot() and pairs() function both take an argument panel= which can be used tocustomize the type of plot which appears in each panel. The default is points() to produce ascatterplot but by supplying some other low-level graphics function of two vectors x and y as thevalue of panel= you can produce any type of plot you wish. An example panel function usefulfor coplots is panel.smooth() .

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

67 de 99 25/02/2011 10:36

Page 68: r Manul Port

Next: Arguments to high-level plotting functions , Previous: Displaying multivariate data , Up:High-level plotting commands

12.1.3 Display graphics

Other high-level graphics functions produce different types of plots. Alguns exemplos são:

qqnorm(x)

qqline(x)

qqplot(x, y)

Distribution-comparison plots. The first form plots the numeric vector x against theexpected Normal order scores (a normal scores plot) and the second adds a straight line tosuch a plot by drawing a line through the distribution and data quartiles. The third formplots the quantiles of x against those of y to compare their respective distributions.

hist(x)

hist(x, nclass= n )hist(x, breaks= b , ...)

Produces a histogram of the numeric vector x . A sensible number of classes is usuallychosen, but a recommendation can be given with the nclass= argument. Alternatively, thebreakpoints can be specified exactly with the breaks= argument. If the probability=TRUEargument is given, the bars represent relative frequencies divided by bin width instead ofcounts.

dotchart(x, ...)

Constructs a dotchart of the data in x . In a dotchart the y-axis gives a labelling of the datain x and the x-axis gives its value. For example it allows easy visual selection of all dataentries with values lying in specified ranges.

image(x, y, z, ...)

contour(x, y, z, ...)

persp(x, y, z, ...)

Plots of three variables. The image plot draws a grid of rectangles using different colours torepresent the value of z , the contour plot draws contour lines to represent the value of z ,and the persp plot draws a 3D surface.

Previous: Display graphics , Up: High-level plotting commands

12.1.4 Arguments to high-level plotting functions

There are a number of arguments which may be passed to high-level graphics functions, asfollows:

add=TRUE

Forces the function to act as a low-level graphics function, superimposing the plot on thecurrent plot (some functions only).

axes=FALSE

Suppresses generation of axes—useful for adding your own custom axes with the axis()function. The default, axes=TRUE , means include axes.

log="x"

log="y"

log="xy"

Causes the x, y or both axes to be logarithmic. This will work for many, but not all, types ofplot.

type=

The type= argument controls the type of plot produced, as follows:type="p"

Plot individual points (the default)

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

68 de 99 25/02/2011 10:36

Page 69: r Manul Port

type="l"

Plot linestype="b"

Plot points connected by lines ( both )type="o"

Plot points overlaid by linestype="h"

Plot vertical lines from points to the zero axis ( high-density )type="s"

type="S"

Step-function plots. In the first form, the top of the vertical defines the point; in thesecond, the bottom.

type="n"

No plotting at all. However axes are still drawn (by default) and the coordinatesystem is set up according to the data. Ideal for creating plots with subsequentlow-level graphics functions.

xlab= stringylab= string

Axis labels for the x and y axes. Use these arguments to change the default labels, usuallythe names of the objects used in the call to the high-level plotting function.

main= stringFigure title, placed at the top of the plot in a large font.

sub= stringSub-title, placed just below the x-axis in a smaller font.

Next: Interacting with graphics , Previous: High-level plotting commands , Up: Graphics

12.2 Low-level plotting commands

Sometimes the high-level plotting functions don't produce exactly the kind of plot you desire. Inthis case, low-level plotting commands can be used to add extra information (such as points, linesor text) to the current plot.

Some of the more useful low-level plotting functions are:

points(x, y)

lines(x, y)

Adds points or connected lines to the current plot. plot() 's type= argument can also bepassed to these functions (and defaults to "p" for points() and "l" for lines() .)

text(x, y, labels, ...)

Add text to a plot at points given by x, y . Normally labels is an integer or charactervector in which case labels[i] is plotted at point (x[i], y[i]) . The default is1:length(x) .

Note : This function is often used in the sequence

> plot(x, y, type="n"); text(x, y, names)

The graphics parameter type="n" suppresses the points but sets up the axes, and thetext() function supplies special characters, as specified by the character vector names forthe points.

abline(a, b)

abline(h= y )

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

69 de 99 25/02/2011 10:36

Page 70: r Manul Port

abline(v= x )abline( lm.obj )

Adds a line of slope b and intercept a to the current plot. h= y may be used to specifyy-coordinates for the heights of horizontal lines to go across a plot, and v= x similarly forthe x-coordinates for vertical lines. Also lm.obj may be list with a coefficientscomponent of length 2 (such as the result of model-fitting functions,) which are taken as anintercept and slope, in that order.

polygon(x, y, ...)

Draws a polygon defined by the ordered vertices in ( x , y ) and (optionally) shade it in withhatch lines, or fill it if the graphics device allows the filling of figures.

legend(x, y, legend, ...)

Adds a legend to the current plot at the specified position. Plotting characters, line styles,colors etc., are identified with the labels in the character vector legend . At least one otherargument v (a vector the same length as legend ) with the corresponding values of theplotting unit must also be given, as follows:legend( , fill= v )

Colors for filled boxeslegend( , col= v )

Colors in which points or lines will be drawnlegend( , lty= v )

Line styleslegend( , lwd= v )

Line widthslegend( , pch= v )

Plotting characters (character vector)

title(main, sub)

Adds a title main to the top of the current plot in a large font and (optionally) a sub-titlesub at the bottom in a smaller font.

axis(side, ...)

Adds an axis to the current plot on the side given by the first argument (1 to 4, countingclockwise from the bottom.) Other arguments control the positioning of the axis within orbeside the plot, and tick positions and labels. Useful for adding custom axes after callingplot() with the axes=FALSE argument.

Low-level plotting functions usually require some positioning information (eg, x and ycoordinates) to determine where to place the new plot elements. Coordinates are given in terms ofuser coordinates which are defined by the previous high-level graphics command and are chosenbased on the supplied data.

Where x and y arguments are required, it is also sufficient to supply a single argument being a listwith elements named x and y . Similarly a matrix with two columns is also valid input. In this wayfunctions such as locator() (see below) may be used to specify positions on a plot interactively.

Mathematical annotationHershey vector fonts

Next: Hershey vector fonts , Previous: Low-level plotting commands , Up: Low-level plottingcommands

12.2.1 Mathematical annotation

In some cases, it is useful to add mathematical symbols and formulae to a plot. This can beachieved in R by specifying an expression rather than a character string in any one of text ,mtext , axis , or title . For example, the following code draws the formula for the Binomial

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

70 de 99 25/02/2011 10:36

Page 71: r Manul Port

probability function:

> text(x, y, expression(paste(bgroup("(", atop(n, x), ")"), p^x, q^{nx})))

More information, including a full listing of the features available can obtained from within Rusing the commands:

> help(plotmath) > example(plotmath) > demo(plotmath)

Previous: Mathematical annotation , Up: Low-level plotting commands

12.2.2 Hershey vector fonts

It is possible to specify Hershey vector fonts for rendering text when using the text and contourfunctions. There are three reasons for using the Hershey fonts:

Hershey fonts can produce better output, especially on a computer screen, for rotatedand/or small text.Hershey fonts provide certain symbols that may not be available in the standard fonts. Inparticular, there are zodiac signs, cartographic symbols and astronomical symbols.Hershey fonts provide cyrillic and japanese (Kana and Kanji) characters.

More information, including tables of Hershey characters can be obtained from within R using thecommands:

> help(Hershey) > demo(Hershey) > help(Japanese) > demo(Japanese)

Next: Using graphics parameters , Previous: Low-level plotting commands , Up: Graphics

12.3 Interacting with graphics

R also provides functions which allow users to extract or add information to a plot using a mouse.The simplest of these is the locator() function:

locator(n, type)

Waits for the user to select locations on the current plot using the left mouse button. Thiscontinues until n (default 512) points have been selected, or another mouse button ispressed. The type argument allows for plotting at the selected points and has the sameeffect as for high-level graphics commands; the default is no plotting. locator() returnsthe locations of the points selected as a list with two components x and y .

locator() is usually called with no arguments. It is particularly useful for interactively selectingpositions for graphic elements such as legends or labels when it is difficult to calculate in advancewhere the graphic should be placed. For example, to place some informative text near an outlyingpoint, the command

> text(locator(1), "Outlier", adj=0)

may be useful. ( locator() will be ignored if the current device, such as postscript does notsupport interactive pointing.)

identify(x, y, labels)

Allow the user to highlight any of the points defined by x and y (using the left mouse

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

71 de 99 25/02/2011 10:36

Page 72: r Manul Port

button) by plotting the corresponding component of labels nearby (or the index number ofthe point if labels is absent). Returns the indices of the selected points when anotherbutton is pressed.

Sometimes we want to identify particular points on a plot, rather than their positions. Forexample, we may wish the user to select some observation of interest from a graphical display andthen manipulate that observation in some way. Given a number of (x, y) coordinates in twonumeric vectors x and y , we could use the identify() function as follows:

> plot(x, y) > identify(x, y)

The identify() functions performs no plotting itself, but simply allows the user to move themouse pointer and click the left mouse button near a point. If there is a point near the mousepointer it will be marked with its index number (that is, its position in the x / y vectors) plottednearby. Alternatively, you could use some informative string (such as a case name) as a highlightby using the labels argument to identify() , or disable marking altogether with the plot =FALSE argument. When the process is terminated (see above), identify() returns the indices ofthe selected points; you can use these indices to extract the selected points from the originalvectors x and y .

Next: Graphics parameters , Previous: Interacting with graphics , Up: Graphics

12.4 Using graphics parameters

When creating graphics, particularly for presentation or publication purposes, R's defaults do notalways produce exactly that which is required. You can, however, customize almost every aspectof the display using graphics parameters . R maintains a list of a large number of graphicsparameters which control things such as line style, colors, figure arrangement and textjustification among many others. Every graphics parameter has a name (such as ` col ', whichcontrols colors,) and a value (a color number, for example.)

A separate list of graphics parameters is maintained for each active device, and each device has adefault set of parameters when initialized. Graphics parameters can be set in two ways: eitherpermanently, affecting all graphics functions which access the current device; or temporarily,affecting only a single graphics function call.

The par() functionArguments to graphics functions

Next: Arguments to graphics functions , Previous: Using graphics parameters , Up: Using graphicsparameters

12.4.1 Permanent changes: The par() function

The par() function is used to access and modify the list of graphics parameters for the currentgraphics device.

par()

Without arguments, returns a list of all graphics parameters and their values for the currentdevice.

par(c("col", "lty"))

With a character vector argument, returns only the named graphics parameters (again, as alist.)

par(col=4, lty=2)

With named arguments (or a single list argument), sets the values of the named graphics

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

72 de 99 25/02/2011 10:36

Page 73: r Manul Port

parameters, and returns the original values of the parameters as a list.

Setting graphics parameters with the par() function changes the value of the parameterspermanently , in the sense that all future calls to graphics functions (on the current device) will beaffected by the new value. You can think of setting graphics parameters in this way as setting“default” values for the parameters, which will be used by all graphics functions unless analternative value is given.

Note that calls to par() always affect the global values of graphics parameters, even when par()is called from within a function. This is often undesirable behavior—usually we want to set somegraphics parameters, do some plotting, and then restore the original values so as not to affect theuser's R session. You can restore the initial values by saving the result of par() when makingchanges, and restoring the initial values when plotting is complete.

> oldpar <- par(col=4, lty=2)

... plotting commands ... > par(oldpar)

To save and restore all settable 23 graphical parameters use

> oldpar <- par(no.readonly=TRUE)

... plotting commands ... > par(oldpar)

Previous: The par() function , Up: Using graphics parameters

12.4.2 Temporary changes: Arguments to graphics functions

Graphics parameters may also be passed to (almost) any graphics function as named arguments.This has the same effect as passing the arguments to the par() function, except that the changesonly last for the duration of the function call. Por exemplo:

> plot(x, y, pch="+")

produces a scatterplot using a plus sign as the plotting character, without changing the defaultplotting character for future plots.

Unfortunately, this is not implemented entirely consistently and it is sometimes necessary to setand reset graphics parameters using par() .

Next: Device drivers , Previous: Using graphics parameters , Up: Graphics

12.5 Graphics parameters list

The following sections detail many of the commonly-used graphical parameters. The R helpdocumentation for the par() function provides a more concise summary; this is provided as asomewhat more detailed alternative.

Graphics parameters will be presented in the following form:

name = valueA description of the parameter's effect. name is the name of the parameter, that is, theargument name to use in calls to par() or a graphics function. value is a typical value youmight use when setting the parameter.

Note that axes is not a graphics parameter but an argument to a few plot methods: see xaxt andyaxt .

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

73 de 99 25/02/2011 10:36

Page 74: r Manul Port

Graphical elementsAxes and tick marksFigure marginsMultiple figure environment

Next: Axes and tick marks , Previous: Graphics parameters , Up: Graphics parameters

12.5.1 Graphical elements

R plots are made up of points, lines, text and polygons (filled regions.) Graphical parameters existwhich control how these graphical elements are drawn, as follows:

pch="+"

Character to be used for plotting points. The default varies with graphics drivers, but it isusually a circle. Plotted points tend to appear slightly above or below the appropriateposition unless you use "." as the plotting character, which produces centered points.

pch=4

When pch is given as an integer between 0 and 25 inclusive, a specialized plotting symbolis produced. To see what the symbols are, use the command

> legend(locator(1), as.character(0:25), pch = 0:25)

Those from 21 to 25 may appear to duplicate earlier symbols, but can be coloured indifferent ways: see the help on points and its examples.

In addition, pch can be a character or a number in the range 32:255 representing acharacter in the current font.

lty=2

Line types. Alternative line styles are not supported on all graphics devices (and vary onthose that do) but line type 1 is always a solid line, line type 0 is always invisible, and linetypes 2 and onwards are dotted or dashed lines, or some combination of both.

lwd=2

Line widths. Desired width of lines, in multiples of the “standard” line width. Affects axislines as well as lines drawn with lines() , etc. Not all devices support this, and some haverestrictions on the widths that can be used.

col=2

Colors to be used for points, lines, text, filled regions and images. A number from thecurrent palette (see ?palette ) or a named colour.

col.axis

col.lab

col.main

col.sub

The color to be used for axis annotation, x and y labels, main and sub-titles, respectively.font=2

An integer which specifies which font to use for text. If possible, device drivers arrange sothat 1 corresponds to plain text, 2 to bold face, 3 to italic, 4 to bold italic and 5 to a symbolfont (which include Greek letters).

font.axis

font.lab

font.main

font.sub

The font to be used for axis annotation, x and y labels, main and sub-titles, respectively.adj=-0.1

Justification of text relative to the plotting position. 0 means left justify, 1 means rightjustify and 0.5 means to center horizontally about the plotting position. The actual value is

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

74 de 99 25/02/2011 10:36

Page 75: r Manul Port

the proportion of text that appears to the left of the plotting position, so a value of -0.1leaves a gap of 10% of the text width between the text and the plotting position.

cex=1.5

Character expansion. The value is the desired size of text characters (including plottingcharacters) relative to the default text size.

cex.axis

cex.lab

cex.main

cex.sub

The character expansion to be used for axis annotation, x and y labels, main and sub-titles,respectively.

Next: Figure margins , Previous: Graphical elements , Up: Graphics parameters

12.5.2 Axes and tick marks

Many of R's high-level plots have axes, and you can construct axes yourself with the low-levelaxis() graphics function. Axes have three main components: the axis line (line style controlledby the lty graphics parameter), the tick marks (which mark off unit divisions along the axis line)and the tick labels (which mark the units.) These components can be customized with thefollowing graphics parameters.

lab=c(5, 7, 12)

The first two numbers are the desired number of tick intervals on the x and y axesrespectively. The third number is the desired length of axis labels, in characters (includingthe decimal point.) Choosing a too-small value for this parameter may result in all ticklabels being rounded to the same number!

las=1

Orientation of axis labels. 0 means always parallel to axis, 1 means always horizontal, and 2means always perpendicular to the axis.

mgp=c(3, 1, 0)

Positions of axis components. The first component is the distance from the axis label to theaxis position, in text lines. The second component is the distance to the tick labels, and thefinal component is the distance from the axis position to the axis line (usually zero).Positive numbers measure outside the plot region, negative numbers inside.

tck=0.01

Length of tick marks, as a fraction of the size of the plotting region. When tck is small (lessthan 0.5) the tick marks on the x and y axes are forced to be the same size. A value of 1gives grid lines. Negative values give tick marks outside the plotting region. Use tck=0.01and mgp=c(1,-1.5,0) for internal tick marks.

xaxs="r"

yaxs="i"

Axis styles for the x and y axes, respectively. With styles "i" (internal) and "r" (thedefault) tick marks always fall within the range of the data, however style "r" leaves asmall amount of space at the edges. (S has other styles not implemented in R.)

Next: Multiple figure environment , Previous: Axes and tick marks , Up: Graphics parameters

12.5.3 Figure margins

A single plot in R is known as a figure and comprises a plot region surrounded by margins(possibly containing axis labels, titles, etc.) and (usually) bounded by the axes themselves.

Graphics parameters controlling figure layout include:

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

75 de 99 25/02/2011 10:36

Page 76: r Manul Port

mai=c(1, 0.5, 0.5, 0)

Widths of the bottom, left, top and right margins, respectively, measured in inches.mar=c(4, 2, 2, 1)

Similar to mai , except the measurement unit is text lines.

mar and mai are equivalent in the sense that setting one changes the value of the other. Thedefault values chosen for this parameter are often too large; the right-hand margin is rarelyneeded, and neither is the top margin if no title is being used. The bottom and left margins must belarge enough to accommodate the axis and tick labels. Furthermore, the default is chosen withoutregard to the size of the device surface: for example, using the postscript() driver with theheight=4 argument will result in a plot which is about 50% margin unless mar or mai are setexplicitly. When multiple figures are in use (see below) the margins are reduced, however thismay not be enough when many figures share the same page.

Previous: Figure margins , Up: Graphics parameters

12.5.4 Multiple figure environment

R allows you to create an n by m array of figures on a single page. Each figure has its ownmargins, and the array of figures is optionally surrounded by an outer margin , as shown in thefollowing figure.

The graphical parameters relating to multiple figures are as follows:

mfcol=c(3, 2)

mfrow=c(2, 4)

Set the size of a multiple figure array. The first value is the number of rows; the second isthe number of columns. The only difference between these two parameters is that settingmfcol causes figures to be filled by column; mfrow fills by rows.

The layout in the Figure could have been created by setting mfrow=c(3,2) ; the figureshows the page after four plots have been drawn.

Setting either of these can reduce the base size of symbols and text (controlled bypar("cex") and the pointsize of the device). In a layout with exactly two rows andcolumns the base size is reduced by a factor of 0.83: if there are three or more of eitherrows or columns, the reduction factor is 0.66.

mfg=c(2, 2, 3, 2)

Position of the current figure in a multiple figure environment. The first two numbers arethe row and column of the current figure; the last two are the number of rows and columnsin the multiple figure array. Set this parameter to jump between figures in the array. Youcan even use different values for the last two numbers than the true values forunequally-sized figures on the same page.

fig=c(4, 9, 1, 4)/10

Position of the current figure on the page. Values are the positions of the left, right, bottomand top edges respectively, as a percentage of the page measured from the bottom leftcorner. The example value would be for a figure in the bottom right of the page. Set thisparameter for arbitrary positioning of figures within a page. If you want to add a figure to acurrent page, use new=TRUE as well (unlike S).

oma=c(2, 0, 3, 0)

omi=c(0, 0, 0.8, 0)

Size of outer margins. Like mar and mai , the first measures in text lines and the second ininches, starting with the bottom margin and working clockwise.

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

76 de 99 25/02/2011 10:36

Page 77: r Manul Port

Outer margins are particularly useful for page-wise titles, etc. Text can be added to the outermargins with the mtext() function with argument outer=TRUE . There are no outer margins bydefault, however, so you must create them explicitly using oma or omi .

More complicated arrangements of multiple figures can be produced by the split.screen() andlayout() functions, as well as by the grid and lattice packages.

Next: Dynamic graphics , Previous: Graphics parameters , Up: Graphics

12.6 Device drivers

R can generate graphics (of varying levels of quality) on almost any type of display or printingdevice. Before this can begin, however, R needs to be informed what type of device it is dealingwith. This is done by starting a device driver . The purpose of a device driver is to convertgraphical instructions from R (“draw a line,” for example) into a form that the particular devicecan understand.

Device drivers are started by calling a device driver function. There is one such function for everydevice driver: type help(Devices) for a list of them all. For example, issuing the command

> postscript()

causes all future graphics output to be sent to the printer in PostScript format. Somecommonly-used device drivers are:

X11()

For use with the X11 window system on Unix-alikeswindows()

For use on Windowsquartz()

For use on Mac OS Xpostscript()

For printing on PostScript printers, or creating PostScript graphics files.pdf()

Produces a PDF file, which can also be included into PDF files.png()

Produces a bitmap PNG file. (Not always available: see its help page.)jpeg()

Produces a bitmap JPEG file, best used for image plots. (Not always available: see its helppage.)

When you have finished with a device, be sure to terminate the device driver by issuing thecommand

> dev.off()

This ensures that the device finishes cleanly; for example in the case of hardcopy devices thisensures that every page is completed and has been sent to the printer. (This will happenautomatically at the normal end of a session.)

PostScript diagrams for typeset documentsMultiple graphics devices

Next: Multiple graphics devices , Previous: Device drivers , Up: Device drivers

12.6.1 PostScript diagrams for typeset documents

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

77 de 99 25/02/2011 10:36

Page 78: r Manul Port

By passing the file argument to the postscript() device driver function, you may store thegraphics in PostScript format in a file of your choice. The plot will be in landscape orientationunless the horizontal=FALSE argument is given, and you can control the size of the graphic withthe width and height arguments (the plot will be scaled as appropriate to fit these dimensions.)For example, the command

> postscript("file.ps", horizontal=FALSE, height=5, pointsize=10)

will produce a file containing PostScript code for a figure five inches high, perhaps for inclusionin a document. It is important to note that if the file named in the command already exists, it willbe overwritten. This is the case even if the file was only created earlier in the same R session.

Many usages of PostScript output will be to incorporate the figure in another document. Thisworks best when encapsulated PostScript is produced: R always produces conformant output, butonly marks the output as such when the onefile=FALSE argument is supplied. This unusualnotation stems from S-compatibility: it really means that the output will be a single page (which ispart of the EPSF specification). Thus to produce a plot for inclusion use something like

> postscript("plot1.eps", horizontal=FALSE, onefile=FALSE, height=8, width=6, pointsize=10)

Previous: PostScript diagrams for typeset documents , Up: Device drivers

12.6.2 Multiple graphics devices

In advanced use of R it is often useful to have several graphics devices in use at the same time. Ofcourse only one graphics device can accept graphics commands at any one time, and this isknown as the current device . When multiple devices are open, they form a numbered sequencewith names giving the kind of device at any position.

The main commands used for operating with multiple devices, and their meanings are as follows:

X11()

[UNIX]windows()

win.printer()

win.metafile()

[Windows]quartz()

[Mac OS X]postscript()pdf()png()jpeg()tiff()

bitmap()

...

Each new call to a device driver function opens a new graphics device, thus extending byone the device list. This device becomes the current device, to which graphics output willbe sent.

dev.list()

Returns the number and name of all active devices. The device at position 1 on the list isalways the null device which does not accept graphics commands at all.

dev.next()

dev.prev()

Returns the number and name of the graphics device next to, or previous to the currentdevice, respectively.

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

78 de 99 25/02/2011 10:36

Page 79: r Manul Port

dev.set(which= k )Can be used to change the current graphics device to the one at position k of the device list.Returns the number and label of the device.

dev.off( k )Terminate the graphics device at point k of the device list. For some devices, such aspostscript devices, this will either print the file immediately or correctly complete the filefor later printing, depending on how the device was initiated.

dev.copy(device, ..., which= k )dev.print(device, ..., which= k )

Make a copy of the device k . Here device is a device function, such as postscript , withextra arguments, if needed, specified by ' ... '. dev.print is similar, but the copied deviceis immediately closed, so that end actions, such as printing hardcopies, are immediatelyperformed.

graphics.off()

Terminate all graphics devices on the list, except the null device.

Previous: Device drivers , Up: Graphics

12.7 Dynamic graphics

R does not have builtin capabilities for dynamic or interactive graphics, eg rotating point clouds orto “brushing” (interactively highlighting) points. However, extensive dynamic graphics facilitiesare available in the system GGobi by Swayne, Cook and Buja available from

http://www.ggobi.org/

and these can be accessed from R via the package rggobi , described at http://www.ggobi.org/rggobi .

Also, package rgl provides ways to interact with 3D plots, for example of surfaces.

Next: A sample session , Previous: Graphics , Up: Top

13 Packages

All R functions and datasets are stored in packages . Only when a package is loaded are itscontents available. This is done both for efficiency (the full list would take more memory andwould take longer to search than a subset), and to aid package developers, who are protectedfrom name clashes with other code. The process of developing packages is described in CreatingR packages . Here, we will describe them from a user's point of view.

To see which packages are installed at your site, issue the command

> library()

with no arguments. To load a particular package (eg, the boot package containing functions fromDavison & Hinkley (1997)), use a command like

> library(boot)

Users connected to the Internet can use the install.packages() and update.packages()functions (available through the Packages menu in the Windows and RAqua GUIs, see Installingpackages ) to install and update packages.

To see which packages are currently loaded, use

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

79 de 99 25/02/2011 10:36

Page 80: r Manul Port

> search()

to display the search list. Some packages may be loaded but not available on the search list (seeNamespaces ): these will be included in the list given by

> loadedNamespaces()

To see a list of all available help topics in an installed package, use

> Help.start ()

to start the HTML help system, and then navigate to the package listing in the Reference section.

pacotes padrãoContributed packages and CRANNamespaces

Next: Contributed packages and CRAN , Previous: Packages , Up: Packages

13.1 Standard packages

The standard (or base ) packages are considered part of the R source code. They contain the basicfunctions that allow R to work, and the datasets and standard statistical and graphical functionsthat are described in this manual. They should be automatically available in any R installation.See R packages , for a complete list.

Next: Namespaces , Previous: Standard packages , Up: Packages

13.2 Contributed packages and CRAN

There are hundreds of contributed packages for R, written by many different authors. Some ofthese packages implement specialized statistical methods, others give access to data or hardware,and others are designed to complement textbooks. Some (the recommended packages) aredistributed with every binary distribution of R. Most are available for download from CRAN (http://CRAN.R-project.org/ and its mirrors), and other repositories such as Bioconductor (http://www.bioconductor.org/ ). The R FAQ contains a list that was current at the time of release,but the collection of available packages changes frequently.

Previous: Contributed packages and CRAN , Up: Packages

13.3 Namespaces

Packages can have namespaces , and currently all of the base and recommended packages doexcept the datasets package. Namespaces do three things: they allow the package writer to hidefunctions and data that are meant only for internal use, they prevent functions from breakingwhen a user (or other package writer) picks a name that clashes with one in the package, and theyprovide a way to refer to an object within a particular package.

For example, t() is the transpose function in R, but users might define their own function namedt . Namespaces prevent the user's definition from taking precedence, and breaking every functionthat tries to transpose a matrix.

There are two operators that work with namespaces. The double-colon operator :: selectsdefinitions from a particular namespace. In the example above, the transpose function will alwaysbe available as base::t , because it is defined in the base package. Only functions that areexported from the package can be retrieved in this way.

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

80 de 99 25/02/2011 10:36

Page 81: r Manul Port

The triple-colon operator ::: may be seen in a few places in R code: it acts like the double-colonoperator but also allows access to hidden objects. Users are more likely to use thegetAnywhere() function, which searches multiple packages.

Packages are often inter-dependent, and loading one may cause others to be automaticallyloaded. The colon operators described above will also cause automatic loading of the associatedpackage. When packages with namespaces are loaded automatically they are not added to thesearch list.

Next: Invoking R , Previous: Packages , Up: Top

Appendix AA sample session

The following session is intended to introduce to you some features of the R environment byusing them. Many features of the system will be unfamiliar and puzzling at first, but thispuzzlement will soon disappear.

Login, start your windowing system.$ R

Start R as appropriate for your platform.

The R program begins, with a banner.

(Within R, the prompt on the left hand side will not be shown to avoid confusion.)

help.start()

Start the HTML interface to on-line help (using a web browser available at your machine).You should briefly explore the features of this facility with the mouse.

Iconify the help window and move on to the next part.

x <- rnorm(50)

y <- rnorm(x)

Generate two pseudo-random normal vectors of x- and y-coordinates.plot(x, y)

Plot the points in the plane. A graphics window will appear automatically.ls()

See which R objects are now in the R workspace.rm(x, y)

Remove objects no longer needed. (Clean up).x <- 1:20

Make x = (1, 2, ... , 20).w <- 1 + sqrt(x)/2

A `weight' vector of standard deviations.dummy <- data.frame(x=x, y= x + rnorm(x)*w)

dummy

Make a data frame of two columns, x and y, and look at it.fm <- lm(y ~ x, data=dummy)

summary(fm)

Fit a simple linear regression and look at the analysis. With y to the left of the tilde, we aremodelling y dependent on x.

fm1 <- lm(y ~ x, data=dummy, weight=1/w^2)

summary(fm1)

Since we know the standard deviations, we can do a weighted regression.attach(dummy)

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

81 de 99 25/02/2011 10:36

Page 82: r Manul Port

Make the columns in the data frame visible as variables.lrf <- lowess(x, y)

Make a nonparametric local regression function.plot(x, y)

Standard point plot.lines(x, lrf$y)

Add in the local regression.abline(0, 1, lty=3)

The true regression line: (intercept 0, slope 1).abline(coef(fm))

Unweighted regression line.abline(coef(fm1), col = "red")

Weighted regression line.detach()

Remove data frame from the search path.plot(fitted(fm), resid(fm),

xlab="Fitted values" , xlab="Fitted values" ,ylab="Residuals" , ylab="Residuals" ,main="Residuals vs Fitted")

A standard regression diagnostic plot to check for heteroscedasticity. Você pode vê-lo?qqnorm(resid(fm), main="Residuals Rankit Plot")

A normal scores plot to check for skewness, kurtosis and outliers. (Not very useful here.)rm(fm, fm1, lrf, x, dummy)

Clean up again.

The next section will look at data from the classical experiment of Michaelson and Morley tomeasure the speed of light. This dataset is available in the morley object, but we will read it toillustrate the read.table function.

filepath <- system.file("data", "morley.tab" , package="datasets")

filepath

Get the path to the data file.file.show(filepath)

Opcional. Look at the file.mm <- read.table(filepath)

mm

Read in the Michaelson and Morley data as a data frame, and look at it. There are fiveexperiments (column Expt ) and each has 20 runs (column Run ) and sl is the recordedspeed of light, suitably coded.

mm$Expt <- factor(mm$Expt)

mm$Run <- factor(mm$Run)

Change Expt and Run into factors.attach(mm)

Make the data frame visible at position 3 (the default).plot(Expt, Speed, main="Speed of Light Data", xlab="Experiment No.")

Compare the five experiments with simple boxplots.fm <- aov(Speed ~ Run + Expt, data=mm)

summary(fm)

Analyze as a randomized block, with `runs' and `experiments' as factors.fm0 <- update(fm, . ~ . - Run)

anova(fm0, fm)

Fit the sub-model omitting `runs', and compare using a formal analysis of variance.detach()

rm(fm, fm0)

Clean up before moving on.

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

82 de 99 25/02/2011 10:36

Page 83: r Manul Port

We now look at some more graphical features: contour and image plots.

x <- seq(-pi, pi, len=50)

y <- x

x is a vector of 50 equally spaced values in the interval [-pi\, pi]. y is the same.f <- outer(x, y, function(x, y) cos(y)/(1 + x^2))

f is a square matrix, with rows and columns indexed by x and y respectively, of values ofthe function cos(y)/(1 + x^2).

oldpar <- par(no.readonly = TRUE)

par(pty="s")

Save the plotting parameters and set the plotting region to “square”.contour(x, y, f)

contour(x, y, f, nlevels=15, add=TRUE)

Make a contour map of f; add in more lines for more detail.fa <- (ft(f))/2

fa is the “asymmetric part” of f. ( t() is transpose).contour(x, y, fa, nlevels=15)

Make a contour plot, ...par(oldpar)

... and restore the old graphics parameters.image(x, y, f)

image(x, y, fa)

Make some high density image plots, (of which you can get hardcopies if you wish), ...objects(); rm(x, y, f, fa)

... and clean up before moving on.

R can do complex arithmetic, also.

th <- seq(-pi, pi, len=100)

z <- exp(1i*th)

1i is used for the complex number i.par(pty="s")

plot(z, type="l")

Plotting complex arguments means plot imaginary versus real parts. This should be a circle.w <- rnorm(100) + rnorm(100)*1i

Suppose we want to sample points within the unit circle. One method would be to takecomplex numbers with standard normal real and imaginary parts ...

w <- ifelse(Mod(w) > 1, 1/w, w)

... and to map any outside the circle onto their reciprocal.plot(w, xlim=c(-1,1), ylim=c(-1,1), pch="+",xlab="x", ylab="y")

lines(z)

All points are inside the unit circle, but the distribution is not uniform.w <- sqrt(runif(100))*exp(2*pi*runif(100)*1i)

plot(w, xlim=c(-1,1), ylim=c(-1,1), pch="+", xlab="x", ylab="y")

lines(z)

The second method uses the uniform distribution. The points should now look more evenlyspaced over the disc.

rm(th, w, z)

Clean up again.q()

Quit the R program. You will be asked if you want to save the R workspace, and for anexploratory session like this, you probably do not want to save it.

Next: The command-line editor , Previous: A sample session , Up: Top

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

83 de 99 25/02/2011 10:36

Page 84: r Manul Port

Appendix B Invoking R

Invoking R from the command lineInvoking R under WindowsInvoking R under Mac OS XScripting with R

Next: Invoking R under Windows , Previous: Invoking R , Up: Invoking R

B.1 Invoking R from the command line

When working in UNIX or at a command line in Windows, the command ' R ' can be used both forstarting the main R program in the form

R [ options ] [ < infile ] [ > outfile ],

or, via the R CMD interface, as a wrapper to various R tools (eg, for processing files in Rdocumentation format or manipulating add-on packages) which are not intended to be called“directly”.

You need to ensure that either the environment variable TMPDIR is unset or it points to a validplace to create temporary files and directories.

Most options control what happens at the beginning and at the end of an R session. The startupmechanism is as follows (see also the on-line help for topic ' Startup ' for more information, andthe section below for some Windows-specific details).

Unless --no-environ was given, R searches for user and site files to process for settingenvironment variables. The name of the site file is the one pointed to by the environmentvariable R_ENVIRON ; if this is unset, R_HOME /etc/Renviron.site is used (if it exists).The user file is the one pointed to by the environment variable R_ENVIRON_USER if this isset; otherwise, files .Renviron in the current or in the user's home directory (in that order)are searched for. These files should contain lines of the form ' name = value '. (Seehelp("Startup") for a precise description.) Variables you might want to set includeR_PAPERSIZE (the default paper size), R_PRINTCMD (the default print command) andR_LIBS (specifies the list of R library trees searched for add-on packages).Then R searches for the site-wide startup profile unless the command line option--no-site-file was given. The name of this file is taken from the value of the R_PROFILEenvironment variable. If that variable is unset, the default R_HOME /etc/Rprofile.site isused if this exists.Then, unless --no-init-file was given, R searches for a user profile and sources it. Thename of this file is taken from the environment variable R_PROFILE_USER ; if unset, a filecalled .Rprofile in the current directory or in the user's home directory (in that order) issearched for.It also loads a saved image from .RData if there is one (unless --no-restore or--no-restore-data was specified).Finally, if a function .First exists, it is executed. This function (as well as .Last which isexecuted at the end of the R session) can be defined in the appropriate startup profiles, orreside in .RData .

In addition, there are options for controlling the memory available to the R process (see theon-line help for topic ' Memory ' for more information). Users will not normally need to use theseunless they are trying to limit the amount of memory used by R.

R accepts the following command-line options.

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

84 de 99 25/02/2011 10:36

Page 85: r Manul Port

--help

-h

Print short help message to standard output and exit successfully.--version

Print version information to standard output and exit successfully.--encoding= enc

Specify the encoding to be assumed for input from the console or stdin . This needs to bean encoding known to iconv : see its help page. ( --encoding enc is also accepted.)

RHOME

Print the path to the R “home directory” to standard output and exit successfully. Apartfrom the front-end shell script and the man page, R installation puts everything(executables, packages, etc.) into this directory.

--save

--no-save

Control whether data sets should be saved or not at the end of the R session. If neither isgiven in an interactive session, the user is asked for the desired behavior when ending thesession with q() ; in non-interactive use one of these must be specified or implied by someother option (see below).

--no-environ

Do not read any user file to set environment variables.--no-site-file

Do not read the site-wide profile at startup.--no-init-file

Do not read the user's profile at startup.--restore

--no-restore

--no-restore-data

Control whether saved images (file .RData in the directory where R was started) should berestored at startup or not. The default is to restore. ( --no-restore implies all the specific--no-restore-* options.)

--no-restore-history

Control whether the history file (normally file .Rhistory in the directory where R wasstarted, but can be set by the environment variable R_HISTFILE ) should be restored atstartup or not. The default is to restore.

--no-Rconsole

(Windows only) Prevent loading the Rconsole file at startup.--vanilla

Combine --no-save , --no-environ , --no-site-file , --no-init-file and--no-restore . Under Windows, this also includes --no-Rconsole .

-f file

--file= file

Take input from file : ' - ' means stdin . Implies --no-save unless --save has been set.-e expression

Use expression as an input line. One or more -e options can be used, but not together with-f or --file . Implies --no-save unless --save has been set. (There is a limit of 10,000bytes on the total length of expressions used in this way.)

--no-readline

(UNIX only) Turn off command-line editing via readline . This is useful when running Rfrom within Emacs using the ESS (“Emacs Speaks Statistics”) package. See Thecommand-line editor , for more information. Command-line editing is enabled by defaultinteractive use (see --interactive ). This option also affects tilde-expansion: see the helpfor path.expand .

--min-vsize= N

--max-vsize= N

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

85 de 99 25/02/2011 10:36

Page 86: r Manul Port

Specify the minimum or maximum amount of memory used for variable size objects bysetting the “vector heap” size to N bytes. Here, N must either be an integer or an integerending with ' G ', ' M ', ' K ', or ' k ', meaning `Giga' (2^30), `Mega' (2^20), (computer) `Kilo'(2^10), or regular `kilo' (1000).

--min-nsize= N

--max-nsize= N

Specify the amount of memory used for fixed size objects by setting the number of “conscells” to N . See the previous option for details on N . A cons cell takes 28 bytes on a 32-bitmachine, and usually 56 bytes on a 64-bit machine.

--max-ppsize= N

Specify the maximum size of the pointer protection stack as N locations. This defaults to10000, but can be increased to allow large and complicated calculations to be done.Currently the maximum value accepted is 100000.

--max-mem-size= N

(Windows only) Specify a limit for the amount of memory to be used both for R objects and

working areas. This is set by default to the smaller of 1.5Gb 24 and the amount of physicalRAM in the machine, and must be between 32Mb and the maximum allowed on thatversion of Windows.

--quiet

--silent

-q

Do not print out the initial copyright and welcome messages.--slave

Make R run as quietly as possible. This option is intended to support programs which use Rto compute results for them. It implies --quiet and --no-save .

--interactive

(UNIX only) Assert that R really is being run interactively even if input has beenredirected: use if input is from a FIFO or pipe and fed from an interactive program. (Thedefault is to deduce that R is being run interactively if and only if stdin is connected to aterminal or pty .) Using -e , -f or --file asserts non-interactive use even if--interactive is given.

--ess

(Windows only) Set Rterm up for use by R-inferior-mode in ESS , including assertinginteractive use without the command-line editor.

--verbose

Print more information about progress, and in particular set R's option verbose to TRUE . Rcode uses this option to control the printing of diagnostic messages.

--debugger= name

-d name

(UNIX only) Run R through debugger name . For most debuggers (the exceptions arevalgrind and recent versions of gdb ), further command line options are disregarded, andshould instead be given when starting the R executable from inside the debugger.

--gui= type

-g type

(UNIX only) Use type as graphical user interface (note that this also includes interactivegraphics). Currently, possible values for type are ' X11 ' (the default) and, provided that 'Tcl/Tk ' support is available, ' Tk '. (For back-compatibility, ' x11 ' and ' tk ' are accepted.)

--args

This flag does nothing except cause the rest of the command line to be skipped: this can beuseful to retrieve values from it with commandArgs(TRUE) .

Note that input and output can be redirected in the usual way (using ' < ' and ' > '), but the linelength limit of 4095 bytes still applies. Warning and error messages are sent to the error channel (stderr ).

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

86 de 99 25/02/2011 10:36

Page 87: r Manul Port

The command R CMD allows the invocation of various tools which are useful in conjunction withR, but not intended to be called “directly”. A forma geral é

R CMD command args

where command is the name of the tool and args the arguments passed on to it.

Currently, the following tools are available.

BATCH

Run R in batch mode.COMPILE

(UNIX only) Compile files for use with R.SHLIB

Build shared library for dynamic loading.INSTALL

Install add-on packages.REMOVE

Remove add-on packages.build

Build (that is, package) add-on packages.check

Check add-on packages.LINK

(UNIX only) Front-end for creating executable programs.Rprof

Post-process R profiling files.Rdconv

Rd2txt

Convert Rd format to various other formats, including HTML , LaTeX, plain text, andextracting the examples. Rd2txt can be used as shorthand for Rd2conv -t txt .

Rd2dvi

Rd2pdf

Convert Rd format to DVI/PDF. Rd2pdf can be used as shorthand for Rd2dvi --pdf .Stangle

Extract S/R code from Sweave documentationSweave

Process Sweave documentationRdiff

Diff R output ignoring headers etcconfig

Obtain configuration informationjavareconf

(Unix only) Update the Java configuration variablesrtags

(Unix only) Create Emacs-style tag files from C, R, and Rd filesopen

(Windows only) Open a file via Windows' file associationstexify

(Windows only) Process (La)TeX files with R's style files

Use

R CMD command --help

to obtain usage information for each of the tools accessible via the R CMD interface.

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

87 de 99 25/02/2011 10:36

Page 88: r Manul Port

In addition, you can use

R CMD cmd args

for any other executable cmd on the path: this is useful to have the same environment as R or thespecific commands run under, for example to run ldd or pdflatex . Under Windows cmd can bean executable or a batch file, or if it has extension .sh or .pl the appropriate interpreter (ifavailable) is called to run it.

Next: Invoking R under Mac OS X , Previous: Invoking R from the command line , Up: InvokingR

B.2 Invoking R under Windows

There are two ways to run R under Windows. Within a terminal window (eg cmd.exe or a morecapable shell), the methods described in the previous section may be used, invoking by R.exe ormore directly by Rterm.exe . (These are principally intended for batch use.) For interactive use,there is a console-based GUI ( Rgui.exe ).

The startup procedure under Windows is very similar to that under UNIX, but references to the`home directory' need to be clarified, as this is not always defined on Windows. If theenvironment variable R_USER is defined, that gives the home directory. Next, if the environmentvariable HOME is defined, that gives the home directory. After those two user-controllable settings,R tries to find system defined home directories. It first tries to use the Windows "personal"directory (typically C:\Documents and Settings\username\My Documents in Windows XP).If that fails, and environment variables HOMEDRIVE and HOMEPATH are defined (and they normallyare) these define the home directory. Failing all those, the home directory is taken to be thestarting directory.

You need to ensure that either the environment variables TMPDIR , TMP and TEMP are either unsetor one of them points to a valid place to create temporary files and directories.

Environment variables can be supplied as ' name = value ' pairs on the command line.

If there is an argument ending .RData (in any case) it is interpreted as the path to the workspaceto be restored: it implies --restore and sets the working directory to the parent of the namedfile. (This mechanism is used for drag-and-drop and file association with RGui.exe , but alsoworks for Rterm.exe . If the named file does not exist it sets the working directory if the parentdirectory exists.)

The following additional command-line options are available when invoking RGui.exe .

--mdi

--sdi

--no-mdi

Control whether Rgui will operate as an MDI program (with multiple child windows withinone main window) or an SDI application (with multiple top-level windows for the console,graphics and pager). The command-line setting overrides the setting in the user's Rconsolefile.

- Debug

Enable the “Break to debugger” menu item in Rgui , and trigger a break to the debuggerduring command line processing.

Under Windows with R CMD you may also specify your own .bat , .exe , .sh or .pl file. It willbe run under the appropriate interpreter (Perl for .pl ) with several environment variables setappropriately, including R_HOME , R_OSTYPE , PATH , BSTINPUTS and TEXINPUTS . For example, if

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

88 de 99 25/02/2011 10:36

Page 89: r Manul Port

you already have latex.exe on your path, then

R CMD latex.exe mydoc

will run LaTeX on mydoc.tex , with the path to R's share/texmf macros appended toTEXINPUTS . (Unfortunately, this does not help with the MiKTeX build of LaTeX, but R CMDtexify mydoc will work in that case.)

Next: Scripting with R , Previous: Invoking R under Windows , Up: Invoking R

B.3 Invoking R under Mac OS X

There are two ways to run R under Mac OS X. Within a Terminal.app window by invoking R ,the methods described in the first subsection apply. There is also console-based GUI ( R.app )that by default is installed in the Applications folder on your system. It is a standard double-clickable Mac OS X application.

The startup procedure under Mac OS X is very similar to that under UNIX. The `home directory'is the one inside the R.framework, but the startup and current working directory are set as theuser's home directory unless a different startup directory is given in the Preferences windowaccessible from within the GUI.

Previous: Invoking R under Mac OS X , Up: Invoking R

B.4 Scripting with R

If you just want to run a file foo.R of R commands, the recommended way is to use R CMDBATCH foo.R . If you want to run this in the background or as a batch job use OS-specificfacilities to do so: for example in most shells on Unix-alike OSes R CMD BATCH foo.R & runs abackground job.

You can pass parameters to scripts via additional arguments on the command line: for example

R CMD BATCH --args arg1 arg2 foo.R &

will pass arguments to a script which can be retrieved as a character vector by

args <- commandArgs(TRUE)

This is made simpler by the alternative front-end Rscript , which can be invoked by

Rscript foo.R arg1 arg2

and this can also be used to write executable script files like (at least on Unix-alikes, and in someWindows shells)

#! /path/to/Rscript args <- commandArgs(TRUE) ... q(status=<exit status code>)

If this is entered into a text file runfoo and this is made executable (by chmod 755 runfoo ), itcan be invoked for different arguments by

runfoo arg1 arg2

For further options see help("Rscript") . This writes R output to stdout and stderr , and thiscan be redirected in the usual way for the shell running the command.

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

89 de 99 25/02/2011 10:36

Page 90: r Manul Port

If you do not wish to hardcode the path to Rscript but have it in your path (which is normallythe case for an installed R except on Windows), use

#! /usr/bin/env Rscript ...

At least in Bourne and bash shells, the #! mechanism does not allow extra arguments like #!/usr/bin/env Rscript --vanilla .

One thing to consider is what stdin() refers to. It is commonplace to write R scripts withsegments like

chem <- scan(n=24) 2.90 3.10 3.40 3.40 3.70 3.70 2.80 2.50 2.40 2.40 2.70 2.20 5.28 3.37 3.03 3.03 28.95 3.77 3.40 2.20 3.50 3.60 3.70 3.70

and stdin() refers to the script file to allow such traditional usage. If you want to refer to theprocess's stdin , use "stdin" as a file connection, eg scan("stdin", ...) .

Another way to write executable script files (suggested by François Pinard) is to use a heredocument like

#! / Bin / sh [environment variables can be set here] R --slave [other options] <<EOF R program goes here... EOF

but here stdin() refers to the program source and "stdin" will not be usable.

Very short scripts can be passed to Rscript on the command-line via the -e flag.

Next: Function and variable index , Previous: Invoking R , Up: Top

Appendix C The command-line editor

C.1 Preliminaries

When the GNU readline library is available at the time R is configured for compilation underUNIX, an inbuilt command line editor allowing recall, editing and re-submission of priorcommands is used. Note that other versions of readline exist and may be used by the inbuiltcommand line editor: this used to happen on Mac OS X.

It can be disabled (useful for usage with ESS 25 ) using the startup option --no-readline .

Windows versions of R have somewhat simpler command-line editing: see ' Console ' under the 'Help ' menu of the GUI , and the file README.Rterm for command-line editing under Rterm.exe .

When using R with readline capabilities, the functions described below are available.

Many of these use either Control or Meta characters. Control characters, such as Control-m , areobtained by holding the <CTRL> down while you press the <m> key, and are written as Cm

below. Meta characters, such as Meta-b , are typed by holding down <META> 26 and pressing<b>, and written as Mb in the following. If your terminal does not have a <META> key enabled,you can still type Meta characters using two-character sequences starting with ESC . Thus, toenter Mb , you could type <ESC><b>. The ESC character sequences are also allowed on terminals

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

90 de 99 25/02/2011 10:36

Page 91: r Manul Port

with real Meta keys. Note that case is significant for Meta characters.

C.2 Editing actions

The R program keeps a history of the command lines you type, including the erroneous lines, andcommands in your history may be recalled, changed if necessary, and re-submitted as newcommands. In Emacs-style command-line editing any straight typing you do while in this editingphase causes the characters to be inserted in the command you are editing, displacing anycharacters to the right of the cursor. In vi mode character insertion mode is started by Mi or Ma ,characters are typed and insertion mode is finished by typing a further <ESC>.

Pressing the <RET> command at any time causes the command to be re-submitted.

Other editing actions are summarized in the following table.

C.3 Command-line editor summary

Command recall and vertical motion

Cp

Go to the previous command (backwards in the history).Cn

Go to the next command (forwards in the history).Cr text

Find the last command with the text string in it.

On most terminals, you can also use the up and down arrow keys instead of Cp and Cn ,respectively.

Horizontal motion of the cursor

Ca

Go to the beginning of the command.Ce

Go to the end of the line.Mb

Go back one word.Mf

Go forward one word.Cb

Go back one character.Cf.

Go forward one character.

On most terminals, you can also use the left and right arrow keys instead of Cb and Cf ,respectively.

Editing and re-submission

textoInsert text at the cursor.

Cf textAppend text after the cursor.

<DEL>

Delete the previous character (left of the cursor).Cd

Delete the character under the cursor.

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

91 de 99 25/02/2011 10:36

Page 92: r Manul Port

Md

Delete the rest of the word under the cursor, and “save” it.Ck

Delete from cursor to end of command, and “save” it.Cy

Insert (yank) the last “saved” text here.Ct

Transpose the character under the cursor with the next.Ml

Change the rest of the word to lower case.Mc

Change the rest of the word to upper case.<RET>

Re-submit the command to R.

The final <RET> terminates the command line editing sequence.

The readline key bindings can be customized in the usual way via a ~/.inputrc file. As from R2.12.0, these customizations can be conditioned on application R , that is by including a sectionlike

$if R "\C-xd": "q('no')\n" $endif

Next: Concept index , Previous: The command-line editor , Up: Top

Appendix D Function and variable index

! : Logical vectors!= : Logical vectors%*% : Multiplication%o% : The outer product of two arrays& : Logical vectors&& : Conditional execution* : Vector arithmetic+ : Vector arithmetic- : Vector arithmetic. : Updating fitted models.First : Customizing the environment.Last : Customizing the environment/ : Vector arithmetic: : Generating regular sequences:: : Namespaces::: : Namespaces< : Logical vectors<<- : Scope<= : Logical vectors== : Logical vectors> : Logical vectors>= : Logical vectors? : Getting help?? : Getting help^ : Vector arithmeticabline : Low-level plotting commands

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

92 de 99 25/02/2011 10:36

Page 93: r Manul Port

ace : Some non-standard modelsadd1 : Updating fitted modelsanova : ANOVA tablesanova : Generic functions for extracting model informationaov : Analysis of variance and model comparisonaperm : Generalized transpose of an arrayarray : The array() functionas.data.frame : Making data framesas.vector : The concatenation function c() with arraysattach : attach() and detach()attr : Getting and setting attributesattributes : Getting and setting attributesavas : Some non-standard modelsaxis : Low-level plotting commandsboxplot : One- and two-sample testsbreak : Repetitive executionbruto : Some non-standard modelsC : Contrastsc : Concatenating listsc : The concatenation function c() with arraysc : Character vectorsc : Vectors and assignmentcbind : Forming partitioned matricescoef : Generic functions for extracting model informationcoefficients : Generic functions for extracting model informationcontour : Display graphicscontrasts : Contrastscoplot : Displaying multivariate datacos : Vector arithmeticcrossprod : Multiplicationcrossprod : Index matricescut : Frequency tables from factorsdata : Accessing builtin datasetsdata.frame : Making data framesdensity : Examining the distribution of a set of datadet : Singular value decomposition and determinantsdetach : attach() and detach()determinant : Singular value decomposition and determinantsdev.list : Multiple graphics devicesdev.next : Multiple graphics devicesdev.off : Multiple graphics devicesdev.prev : Multiple graphics devicesdev.set : Multiple graphics devicesdeviance : Generic functions for extracting model informationdiag : Multiplicationdim : Arraysdotchart : Display graphicsdrop1 : Updating fitted modelsecdf : Examining the distribution of a set of dataedit : Editing dataeigen : Eigenvalues and eigenvectorselse : Conditional executionError : Analysis of variance and model comparisonexample : Getting help

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

93 de 99 25/02/2011 10:36

Page 94: r Manul Port

exp : Vector arithmeticF : Logical vectorsfactor : FactorsFALSE : Logical vectorsfivenum : Examining the distribution of a set of datafor : Repetitive executionformula : Generic functions for extracting model informationfunction : Writing your own functionsgetAnywhere : Object orientationgetS3method : Object orientationglm : The glm() functionhelp : Getting helphelp.search : Getting helphelp.start : Getting helphist : Display graphicshist : Examining the distribution of a set of dataidentify : Interacting with graphicsif : Conditional executionifelse : Conditional executionimage : Display graphicsis.na : Missing valuesis.nan : Missing valuesjpeg : Device driversks.test : Examining the distribution of a set of datalegend : Low-level plotting commandslength : The intrinsic attributes mode and lengthlength : Vector arithmeticlevels : Factorslines : Low-level plotting commandslist : Listslm : Linear modelslme : Some non-standard modelslocator : Interacting with graphicsloess : Some non-standard modelslog : Vector arithmeticlqs : Some non-standard modelslsfit : Least squares fitting and the QR decompositionmars : Some non-standard modelsmax : Vector arithmeticmean : Vector arithmeticmethods : Object orientationmin : Vector arithmeticmode : The intrinsic attributes mode and lengthNA : Missing valuesNaN : Missing valuesncol : Matrix facilitiesnext : Repetitive executionnlm : Maximum likelihoodnlm : Least squaresnlm : Nonlinear least squares and maximum likelihood modelsnlme : Some non-standard modelsnlminb : Nonlinear least squares and maximum likelihood modelsnrow : Matrix facilitiesoptim : Nonlinear least squares and maximum likelihood models

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

94 de 99 25/02/2011 10:36

Page 95: r Manul Port

order : Vector arithmeticordered : Ordered factorsouter : The outer product of two arrayspairs : Displaying multivariate datapar : The par() functionpaste : Character vectorspdf : Device driverspersp : Display graphicsplot : The plot() functionplot : Generic functions for extracting model informationpmax : Vector arithmeticpmin : Vector arithmeticpng : Device driverspoints : Low-level plotting commandspolygon : Low-level plotting commandspostscript : Device driverspredict : Generic functions for extracting model informationprint : Generic functions for extracting model informationprod : Vector arithmeticqqline : Display graphicsqqline : Examining the distribution of a set of dataqqnorm : Display graphicsqqnorm : Examining the distribution of a set of dataqqplot : Display graphicsqr : Least squares fitting and the QR decompositionquartz : Device driversrange : Vector arithmeticrbind : Forming partitioned matricesread.table : The read.table() functionrep : Generating regular sequencesrepeat : Repetitive executionresid : Generic functions for extracting model informationresiduals : Generic functions for extracting model informationrlm : Some non-standard modelsrm : Data permanency and removing objectsscan : The scan() functionsd : The function tapply() and ragged arrayssearch : Managing the search pathseq : Generating regular sequencesshapiro.test : Examining the distribution of a set of datasin : Vector arithmeticsink : Executing commands from or diverting output to a filesolve : Linear equations and inversionsort : Vector arithmeticsource : Executing commands from or diverting output to a filesplit : Repetitive executionsqrt : Vector arithmeticstem : Examining the distribution of a set of datastep : Updating fitted modelsstep : Generic functions for extracting model informationsum : Vector arithmeticsummary : Generic functions for extracting model informationsummary : Examining the distribution of a set of datasvd : Singular value decomposition and determinants

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

95 de 99 25/02/2011 10:36

Page 96: r Manul Port

t : Generalized transpose of an arrayT : Logical vectorst.test : One- and two-sample teststable : Frequency tables from factorstable : Index matricestan : Vector arithmetictapply : The function tapply() and ragged arraystext : Low-level plotting commandstitle : Low-level plotting commandstree : Some non-standard modelsTRUE : Logical vectorsunclass : The class of an objectupdate : Updating fitted modelsvar : The function tapply() and ragged arraysvar : Vector arithmeticvar.test : One- and two-sample testsvcov : Generic functions for extracting model informationvector : Vectors and assignmentwhile : Repetitive executionwilcox.test : One- and two-sample testswindows : Device driversX11 : Device drivers| : Logical vectors|| : Conditional execution~ : Formulae for statistical models

Next: References , Previous: Function and variable index , Up: Top

Appendix E Concept index

Accessing builtin datasets : Accessing builtin datasetsAdditive models : Some non-standard modelsAnalysis of variance : Analysis of variance and model comparisonArithmetic functions and operators : Vector arithmeticArrays : ArraysAssignment : Vectors and assignmentAttributes : ObjectsBinary operators : Defining new binary operatorsBox plots : One- and two-sample testsCharacter vectors : Character vectorsClasses : Object orientationClasses : The class of an objectConcatenating lists : Concatenating listsContrasts : ContrastsControl statements : Control statementsCRAN : Contributed packages and CRANCustomizing the environment : Customizing the environmentData frames : Data framesDefault values : Named arguments and defaultsDensity estimation : Examining the distribution of a set of dataDeterminants : Singular value decomposition and determinantsDiverting input and output : Executing commands from or diverting output to a fileDynamic graphics : Dynamic graphicsEigenvalues and eigenvectors : Eigenvalues and eigenvectors

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

96 de 99 25/02/2011 10:36

Page 97: r Manul Port

Empirical CDFs : Examining the distribution of a set of dataFactors : ContrastsFactors : FactorsFamilies : FamiliesFormulae : Formulae for statistical modelsGeneralized linear models : Generalized linear modelsGeneralized transpose of an array : Generalized transpose of an arrayGeneric functions : Object orientationGraphics device drivers : Device driversGraphics parameters : The par() functionGrouped expressions : Grouped expressionsIndexing of and by arrays : Array indexingIndexing vectors : Index vectorsKolmogorov-Smirnov test : Examining the distribution of a set of dataLeast squares fitting : Least squares fitting and the QR decompositionLinear equations : Linear equations and inversionLinear models : Linear modelsLists : ListsLocal approximating regressions : Some non-standard modelsLoops and conditional execution : Loops and conditional executionMatrices : ArraysMatrix multiplication : MultiplicationMaximum likelihood : Maximum likelihoodMissing values : Missing valuesMixed models : Some non-standard modelsNamed arguments : Named arguments and defaultsNamespace : NamespacesNonlinear least squares : Nonlinear least squares and maximum likelihood modelsObject orientation : Object orientationObjects : ObjectsOne- and two-sample tests : One- and two-sample testsOrdered factors : ContrastsOrdered factors : FactorsOuter products of arrays : The outer product of two arraysPackages : PackagesPackages : R and statisticsProbability distributions : Probability distributionsQR decomposition : Least squares fitting and the QR decompositionQuantile-quantile plots : Examining the distribution of a set of dataReading data from files : Reading data from filesRecycling rule : The recycling ruleRecycling rule : Vector arithmeticRegular sequences : Generating regular sequencesRemoving objects : Data permanency and removing objectsRobust regression : Some non-standard modelsScope : ScopeSearch path : Managing the search pathShapiro-Wilk test : Examining the distribution of a set of dataSingular value decomposition : Singular value decomposition and determinantsStatistical models : Statistical models in RStudent's t test : One- and two-sample testsTabulation : Frequency tables from factorsTree-based models : Some non-standard modelsUpdating fitted models : Updating fitted models

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

97 de 99 25/02/2011 10:36

Page 98: r Manul Port

Vectors : Simple manipulations numbers and vectorsWilcoxon test : One- and two-sample testsWorkspace : Data permanency and removing objectsWriting functions : Writing your own functions

Previous: Concept index , Up: Top

Appendix F References

DM Bates and DG Watts (1988), Nonlinear Regression Analysis and Its Applications. John Wiley& Sons, New York.

Richard A. Becker, John M. Chambers and Allan R. Wilks (1988), The New S Language.Chapman & Hall, New York. This book is often called the “ Blue Book ”.

John M. Chambers and Trevor J. Hastie eds. (1992), Statistical Models in S. Chapman & Hall,New York. This is also called the “ White Book ”.

John M. Chambers (1998) Programming with Data . Springer, de Nova York. This is also calledthe “ Green Book ”.

AC Davison and DV Hinkley (1997), Bootstrap Methods and Their Applications , CambridgeUniversity Press.

Annette J. Dobson (1990), An Introduction to Generalized Linear Models , Chapman and Hall,London.

Peter McCullagh and John A. Nelder (1989), Generalized Linear Models. Second edition,Chapman and Hall, London.

John A. Rice (1995), Mathematical Statistics and Data Analysis. Second edition. Duxbury Press,Belmont, CA.

SD Silvey (1970), Statistical Inference. Penguin, London.

Notas de Rodapé

[ 1 ] For portable R code (including that to be used in R packages) only A–Za–z0–9 should beused.

[ 2 ] not inside strings, nor within the argument list of a function definition

[ 3 ] some of the consoles will not allow you to enter more, and amongst those which do some willsilently discard the excess and some will use it as the start of the next line.

[ 4 ] of unlimited length.

[ 5 ] The leading “dot” in this file name makes it invisible in normal file listings in UNIX.

[ 6 ] With other than vector types of argument, such as list mode arguments, the action of c() israther different. See Concatenating lists .

[ 7 ] Actually, it is still available as .Last.value before any other statements are executed.

[ 8 ] paste(..., collapse= ss ) joins the arguments into a single character string putting ss inbetween. There are more tools for character manipulation, see the help for sub and substring .

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

98 de 99 25/02/2011 10:36

Page 99: r Manul Port

[ 9 ] numeric mode is actually an amalgam of two distinct modes, namely integer and doubleprecision, as explained in the manual.

[ 10 ] Note however that length( object ) does not always contain intrinsic useful information,eg, when object is a function.

[ 11 ] In general, coercion from numeric to character and back again will not be exactly reversible,because of roundoff errors in the character representation.

[ 12 ] A different style using `formal' or `S4' classes is provided in package methods .

[ 13 ] Readers should note that there are eight states and territories in Australia, namely theAustralian Capital Territory, New South Wales, the Northern Territory, Queensland, SouthAustralia, Tasmania, Victoria and Western Australia.

[ 14 ] Note that tapply() also works in this case when its second argument is not a factor, eg, 'tapply(incomes, state) ', and this is true for quite a few other functions, since arguments arecoerced to factors when necessary (using as.factor() ).

[ 15 ] Note that x %*% x is ambiguous, as it could mean either x'x or x x', where x is the columnform. In such cases the smaller matrix seems implicitly to be the interpretation adopted, so thescalar x'x is in this case the result. The matrix xx' may be calculated either by cbind(x) %*% x orx %*% rbind(x) since the result of rbind() or cbind() is always a matrix. However, the bestway to compute x'x or xx' is crossprod(x) or x %o% x respectively.

[ 16 ] Even better would be to form a matrix square root B with A = BB' and find the squaredlength of the solution of By = x, perhaps using the Cholesky or eigendecomposition of A.

[ 17 ] See the on-line help for autoload for the meaning of the second term.

[ 18 ] Under UNIX, the utilities Sed or Awk can be used.

[ 19 ] to be discussed later, or use xyplot from package lattice .

[ 20 ] See also the methods described in Statistical models in R

[ 21 ] In some sense this mimics the behavior in S-PLUS since in S-PLUS this operator alwayscreates or assigns to a global variable.

[ 22 ] So it is hidden under UNIX.

[ 23 ] Some graphics parameters such as the size of the current device are for information only.

[ 24 ] 2.5Gb on versions of Windows that support 3Gb per process and have the support enabled:see the rw-FAQ Q2.9; 3.5Gb on some 64-bit versions of Windows.

[ 25 ] The `Emacs Speaks Statistics' package; see the URL http://ESS.R-project.org

[ 26 ] On a PC keyboard this is usually the Alt key, occasionally the `Windows' key.

Uma Introdução ao R http://translate.googleusercontent.com/translate_c?hl=pt-BR&ie=UTF-...

99 de 99 25/02/2011 10:36