flowchart LR A(Dados) -.-> B(Processamento na Função) -.-> C(Resultado)
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.
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:
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.
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 a0
porque pretendemos obter um arredondamento às unidades (i.e., com0
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
?
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:
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 a0
: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:
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: