**[[.:start|Uso da Linguagem R para Análise de Dados em Ecologia]]** ====== 2. Funções no R e sua Aplicação ====== ===== 2.1 Algumas Funções Úteis ===== ==== Iniciando e Finalizando o R ==== Para iniciarmos o R no sistema MS-Windows, é necessário clicar no ícone apropriado (no desktop) ou buscar o programa a partir do menu **Iniciar**. Já em ambiente UNIX (como o Linux, por exemplo), podemos iniciar o R a partir de um "terminal" evocando o comando R: parsival@jatai $ R Independentemente de como inicia, o R apresenta uma tela com (aproximadamente) a seguinte forma: R version 2.4.1 (2006-12-18) Copyright (C) 2006 The R Foundation for Statistical Computing ISBN 3-900051-07-0 R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. Natural language support but running in an English locale R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. [Previously saved workspace restored] > Agora é só começar a digitar os comandos!!! Para sair do R, a forma mais fácil é usar o comando ''q'' (do inglês //quit//). Nesse caso o R, lhe pergunda se você deseja //salvar// (gravar) sua sessão de trabalho. > q() Save workspace image? [y/n/c]: As opções são: ''y = yes, n = no, c = cancel''. ==== Particularidades dos Comandos no R ==== O R é um sistema bastante particular para muitas pessoas. Alguns detalhes dos comandos e nomes que são usados no R devem ser aprendidos: - O nome de comandos e objetos no R pode ser compostos de: * letras (minúsculas ou maiúsculas), * números, e * o ponto (.). - Evite qualquer outro caracter especial, incluindo //o espaço em branco//. - O nome //não pode ser iniciado// por um número. - O R é sensível a caixa: o comando ''q'' é diferente do comando ''Q'' (que não existe!!!). Para que um comando seja **executado** pelo R é necessário ser acompanhado de parênteses '()'. Compare esse comando > q() Save workspace image? [y/n/c]: c > com o comando > q function (save = "default", status = 0, runLast = TRUE) .Internal(quit(save, status, runLast)) > O comando sem os parênteses é na verdade o **nome do comando**. Sendo o R um software de código aperto, toda vêz que se digita o nome de um comando, ele **não executa** o comando mas **mostra o conteúdo** do comando (o código). ==== Como Conseguir Ajuda no R ==== No R é essencial aprender a procurar auxílio e manuais sozinho. Após um aprendizado inicial, não há meio de evoluir no conhecimento do ambiente R se não se buscar os **//helps//** que ele possui. Para conseguir ajuda sobre um comando pode ser usada a função ''help'': > help(mean) ou então o operador de ajuda que é o sinal de interrogação '?': ?mean No caso se buscar ajuda sobre um **operador** (símbolo para operadoções aritméticas e algébricas) devemos utilizar as aspas duplas: > help("+") > ?"*" Ao utilizar esses comandos (help e ?) o R entra num modo interativo diferente: **help interativo**. Ele apresenta uma **//help page//** que você pode examinar usando os seguintes comandos de teclado: * tecla de espaço = um página para frente; * tecla "f" = uma página para frente; * tecla "b" = uma página para trás; * tecla enter = uma linha para frente; * tecla j = uma linha para frende; * tecla k = uma linha para trás; * tecla q = sai do modo **help interativo** e retorna à linha de comando. No modo **help interativo** também é possível se fazer uma busca por uma palabra (//string//) usando a tecla '/', na forma: /string Executado um comando de busca temos dois novos comandos válidos: * tecla n = próxima string, e * tecla N = string anterior. Para os que preferem trabalhar com **internet browser**, o comando '''help.start()''': > help.start() Making links in per-session dir ... If 'sensible-browser' is already running, it is *not* restarted, and you must switch to its window. Otherwise, be patient ... > A partir desse comando, todo comando '''help''' iniciará uma nova página no **browser**. Outro comando muito útil é o '''apropos'''. Ele possibilita sabermos quais funções do R tem no nome uma certa palavra (//string//): > apropos(plot) [1] "biplot" "interaction.plot" "lag.plot" [4] "monthplot" "plot.density" "plot.ecdf" [7] "plot.lm" "plot.mlm" "plot.spec" [10] "plot.spec.coherency" "plot.spec.phase" "plot.stepfun" [13] "plot.ts" "plot.TukeyHSD" "preplot" [16] "qqplot" "screeplot" "termplot" [19] "ts.plot" "assocplot" "barplot" [22] "barplot.default" "boxplot" "boxplot.default" [25] "cdplot" "coplot" "fourfoldplot" [28] "matplot" "mosaicplot" "plot" [31] "plot.default" "plot.design" "plot.new" [34] "plot.window" "plot.xy" "spineplot" [37] "sunflowerplot" "boxplot.stats" ".__C__recordedplot" ==== Aprenda esse Comando para Não Perder Seu Trabalho ==== Cada vez que você inicia o R, dizemos que se inicia uma **sessão**. A sessão iniciada está ligada à uma área de trabalho particular chamada de **workspace**. Tudo o que você faz durante uma sessão (leitura de dados, cálculos, análises estatísticas) é realizado no **workspace**. Mas o **workspace permanece na memória do computador**. Somente quando você dá o comando de sair ('''q()''') é que o R lhe pergunta se você deseja **gravar** o seu **workspace**. Se acontecer do computador ser desligado durante uma sessão do R, tudo que foi fei será perdido!!! Para evitar isso, é interessante (de vez enquando) mandar o R gravar o **workspace** utilizando o comando '''save.image()''': > save.image() > Por default, o R gravará o workspace no arquivo ''.RData'', e quando você reiniciar uma sessão, o R automaticamente **carrega** esse arquivo. Mas você pode savar em outro arquivo utilizando o **argumento** ''file'': > save.image(file="minha-sessao-introdutoria.R") > Nesse caso, quando você iniciar uma nova sessão no R, para recuperar o trabalho da sessão anterior terá de usar o comando: > load(file="minha-sessao-introdutoria.R") > ===== 2.2 O R como uma Potente Calculadora ===== ==== Operações Aritméticas Básicas ==== A linha de comando do R funciona como uma potente calculadora. Todas operações aritméticas e funções matemáticas principais estão disponíveis. Exemplo: 4 + 9 [1] 13 > 4 - 5 [1] -1 > 4 * 5 [1] 20 > 4 / 5 [1] 0.8 > 4^5 [1] 1024 > A notação básica de operações algébricas, como a aplicação hierárquica dos parênteses, também pode ser utilizada: > ( 4 + 5 ) * 7 - (35/16)^3 [1] 52.53247 > > ( 2 * ( 3 * (1 - 0.5) ) ) [1] 3 > ==== Funções Matemáticas Comuns ==== As funções matemáticas comuns também estão disponíveis: > sqrt(9) [1] 3 > abs( - 1 ) [1] 1 > abs( 1 ) [1] 1 > log(10) [1] 2.302585 > log(10, base=10) [1] 1 > exp(2.3) [1] 9.974182 > exp(-0.5) [1] 0.6065307 > sin(0.5*pi) [1] 1 > cos(2*pi) [1] 1 > tan(pi) [1] -1.224647e-16 > tan(pi/2) [1] 1.633124e+16 ==== Mantendo a Coerência Matemática ==== O R também lida com operações matemáticas que envolvem **elementos infinitos** e **elementos indeterminados**: > 1/0 [1] Inf > -5/0 [1] -Inf > 500000000000000000/Inf [1] 0 > 0/0 [1] NaN > Inf/Inf [1] NaN > log(0) [1] -Inf > exp(-Inf) [1] 0 > sqrt(Inf) [1] Inf > sqrt( - 1 ) [1] NaN Warning message: NaNs produced in: sqrt(-1) > 2 * NA [1] NA > 2 * NaN [1] NaN > NA / 10 [1] NA > NaN / -1 [1] NaN > Note que determinadas **palavras** (além do nome das funções) estão reservadas no R, pois são utilizadas com significado especial: * ''pi'' - constante pi; * ''Inf'' - infinito; * ''NaN'' (Not a Number) - indeterminado que resulta de uma operação matemática indeterminada; * ''NA'' (Not Avaiable) - indeterminado que caracteriza uma observação perdida. Na operações matemáticas, ''NaN'' e ''NA'' atuam sempre como **indeterminado**. ==== Criando Variáveis ==== Mais do que simples operações aritméticas, o R permite que executemos operações **algébricas** operando sobre variáveis prédefinidas. Para definir uma variável, basta escolher um nome (//lembre-se das regras de nomes no R//) e atribuir a ela um valor: > > a = 3.6 > b = sqrt( 35 ) > c = -2.1 > a [1] 3.6 > b [1] 5.91608 > c [1] -2.1 > > a * b / c [1] -10.14185 > b^c [1] 0.02391820 > a + exp(c) - log(b) [1] 1.944782 > > a - b * c / d Error: object "d" not found > Não esqueça de definir as variáveis previamente!! ===== 2.3 R como uma Calculadora Vetorial ===== As operações de cálculos matemáticos e estatísticos no R podem ser executadas num único número ou numa série de números Para podermos montar uma série de números utilizamos a função ''c()'' (//concatenate//): > d = c(3.5, 2.1, -1, -4.5, sqrt(4.4), exp(-0.25), 3/4*pi) > d [1] 3.5000000 2.1000000 -1.0000000 -4.5000000 2.0976177 0.7788008 2.3561945 > > e1 = 1:7 > e1 [1] 1 2 3 4 5 6 7 > e2 = 10:27 > e2 [1] 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 > Note que os argumentos da função ''c()'' são separados por **vírgulas** e o símbolo de decimal é o ponto. Da mesma forma que operamos sobre números podemos operar sobre a série de números o vetores: > 2*d [1] 7.000000 4.200000 -2.000000 -9.000000 4.195235 1.557602 4.712389 > d / 3 [1] 1.1666667 0.7000000 -0.3333333 -1.5000000 0.6992059 0.2596003 0.7853982 > d + e1 [1] 4.500000 4.100000 2.000000 -0.500000 7.097618 6.778801 9.356194 > e1^d [1] 1.000000000 4.287093850 0.333333333 0.001953125 29.253096938 [6] 4.036684464 97.997578738 > log(e1) [1] 0.0000000 0.6931472 1.0986123 1.3862944 1.6094379 1.7917595 1.9459101 > exp(d) [1] 33.11545196 8.16616991 0.36787944 0.01110900 8.14673877 2.17885778 [7] 10.55072407 > sqrt(e1) [1] 1.000000 1.414214 1.732051 2.000000 2.236068 2.449490 2.645751 > sqrt(d) [1] 1.8708287 1.4491377 NaN NaN 1.4483155 0.8824969 1.5349901 Warning message: NaNs produced in: sqrt(d) > É necessário prestar atenção às operações matemáticas apropriadas. Também é necessário prestar atenção ao **comprimento** (//length//) dos vetores: > d - e2 [1] -6.50000 -8.90000 -13.00000 -17.50000 -11.90238 -14.22120 -13.64381 [8] -13.50000 -15.90000 -20.00000 -24.50000 -18.90238 -21.22120 -20.64381 [15] -20.50000 -22.90000 -27.00000 -31.50000 Warning message: longer object length is not a multiple of shorter object length in: d - e2 >