6  Funções

Em R, as funções são um conjuntos de código com uma determinada finalidade, código esse que é executado sempre que a função é chamada. A maior parte das funções funciona de forma muito parecida: temos uma função à qual damos um conjunto de dados (por exemplo, um vetor ou uma tabela de dados), a função processa os dados e retorna um resultado.

flowchart LR
  A(Dados) -.-> B(Processamento na Função) -.-> C(Resultado)

Já utilizamos uma função no capítulo anterior (a função c(), que cria vetores a partir de um conjunto de valores).

A maior parte das análises de dados em R requer o uso de funções. A versão base do R traz algumas funções úteis pré-instaladas, mas há formas de adicionar funções criadas por terceiros (através da instalação de pacotes) ou mesmo de criar as suas próprias funções.

Quando finalizar este capítulo, deverá ser capaz de:

Objetivos de aprendizagem
  • Compreender o conceito de função no R.
  • Conhecer as características básicas de uma função.
  • Estar familiarizado com algumas funções úteis para estatística descritiva.
  • Consultar os documentos de ajuda sobre uma função.

 

6.1 Nome e argumentos de uma função

Para chamar (utilizar) uma função no R, basta escrever o nome da função, seguido de parênteses (). Tudo o que escrevermos dentro dos parênteses são os argumentos da função. Assim, as funções têm sempre o seguinte formato generalista: nome(argumentos)

Vamos ver um exemplo. Consideremos o vetor pas, com os valores de pressão arterial sistólica de cinco pacientes. É possível calcular a média da pressão arterial sistólica recorrendo à função mean(), pré-instalada no R.

pas <- c(114, 127, 119, 162, 134)
mean(pas)
[1] 131.2

O nome da função é mean e passamos à função um único argumento, que consiste no vetor de dados cuja média pretendemos calcular.

Se quisermos, podemos inclusivamente guardar o resultado num novo objeto:

pas_media <- mean(pas)
pas_media
[1] 131.2

A função mean() é apenas um exemplo de função pré-instalada no R e que lhe será muito útil. Existe um conjunto grande de funções disponíveis. Por exemplo, podemos arredondar o valor guardado em pas_media às unidades:

round(pas_media, digits = 0)
[1] 131

Neste caso, o nome da função é round e tomou dois argumentos:

  • o primeiro argumento consiste no nome do objeto onde estão guardados os dados aos quais a função se deve aplicar. No caso em apreço, consiste no objeto pas_media, onde está guardado o valor médio da pressão arterial sistólica, anteriormente calculado (131.2).
  • o segundo argumento tem o nome digits e igualamos a 0 porque pretendemos obter um arredondamento às unidades (i.e., com 0 algarismos decimais).

O resultado final é que estamos a aplicar a função round() aos dados guardados no objeto pas_media, e estamos a instruir que pretendemos que o arredondamento aconteça com 0 algarismos decimais (digits = 0).

6.2 Obter ajuda sobre uma função

Documentação

À medida que for utilizando algumas funções com frequência, irá memorizando o que cada função faz e quais os argumentos necessários. No entanto, por vezes, poderá necessitar de consultar a documentação sobre determinada função.

O acesso à documentação através do R é muito simples, através do operador ?. Por exemplo, para obter informações acerca da função round():

?round

Figure 6.1: O operador ? permite-lhe aceder à documentação de funções no separador Ajuda.

A documentação das funções está tipicamente organizada em várias secções.1 É possível ver o seguinte:

  • 1 Note que a documentação da função round() lhe dá informações sobre outras funções da mesma família da função round() (como a função ceiling(), a função floor() e a função trunc()), que pode ignorar.

  • Organização da documentação

    • Description: Contém uma descrição da funcionalidade da função. Neste caso, em relação à função round(), indica que a função arredonda os valores do primeiro argumento para um número de algarismos decimais especificado no segundo argumento. Isto não é nenhuma novidade - já tínhamos chegado a esta conclusão -, mas note que a documentação tem uma informação adicional: o valor assumido por omissão para o número de algarismos decimais é 0.
    • Usage: Mostra como a função deve ser utilizada. Note que o segundo argumento, digits, está igualado a 0: round(x, digits = 0). Isto indica que o valor por omissão (isto é, o valor assumido caso o argumento não seja especificado), é 0.
    • Argumentos: Explica em que consiste cada um dos argumentos.

    Agora que conhece a estrutura da função round(), note que não é necessário especificar o nome do segundo argumento (digits):

    round(pas_media, 0)
    [1] 131

    Isto acontece porque, se não especificar o nome do argumento, o R assume que os argumentos passados à função foram introduzidos por ordem. De facto, note ainda que:

    round(pas_media)
    [1] 131

    Uma vez que o valor por omissão do argumento digits é 0, não é, sequer, necessário especificar este argumento. Bastaria especificar o argumento caso pretendesse efetuar um arredondamento para um número de algarismos decimais diferente de 0.

    Autocompletar com a tecla Tab

    Nesta fase, é normal que esteja a pensar que certamente existem muitas funções disponíveis no R, cada uma com os seus argumentos. Felizmente, não é preciso memorizar tudo! Para além do acesso fácil à documentação, já descrito acima, o R tem algumas funções que podem ajudá-lo a utilizar funções devidamente.

    Uma dessas funções é a função de autocompletar com a tecla Tab: o RStudio permite-lhe autocompletar os seus comandos recorrendo à tecla Tab. Por exemplo, se não se lembrar do nome exato da função que permite fazer o arredondamento de um número, mas começar a escrever ro na consola e clicar na tecla Tab:

    Figure 6.2: Pode navegar entre as diferentes opções utilizando as setas do teclado ou o rato.

    O RStudio mostra-lhe uma pequena janela com várias opções, que pode escolher, além de informação útil associada a cada uma das opções.

    Por outro lado, se já tiver escrito o nome da função e aberto parênteses round( e tiver dificuldades com os argumentos, também pode clicar na tecla Tab. O RStudio reconhecerá que, uma vez que já escreveu o nome da função, então só precisa de ajuda com os argumentos:

    Figure 6.3: O novo pop-up mostra-lhe os argumentos possíveis à esquerda e informação sobre cada um deles à direita.
    Praticar
    1. Comece por um vetor altura com os seguintes dados de alturas de 4 pacientes em metros: 1.70, 1.78, 1.72, 1.93. Resolva os exercícios seguintes, consultando a documentação das funções, sempre que necessário.

      1. Calcule o valor médio das alturas em metros, utilizando a função mean().
      2. Indique qual é a altura em metros do indivíduo mais baixo, utilizando a função min().
      3. Indique qual é a altura em metros do indivíduo mais alto, utilizando a função max().
      4. Calcule o desvio padrão e a variância das alturas em metros, utilizando a função sd() e var().
      5. Calcule a mediana das alturas em centímetros, utilizando a função median().
    2. Crie agora o seguinte vetor de dados: peso <- c(62, 73, NA, 82). Calcule a média e a mediana dos valores de peso (em kg). Recorde que qualquer operação aritmética envolvendo o valor NA retorna NA. Consulte a documentação das funções para descobrir como proceder.