7  Funções

Uma das principais vantagens dos softwares estatísticos, como o R, reside na sua capacidade de criar e manipular funções de forma simples e eficiente.

Uma função pode ser entendida como uma série de instruções que você deseja que o programa execute. Se você utiliza frequentemente uma determinada sequência de comandos, em vez de reescrevê-los repetidamente, é mais prático criar uma função para automatizar esse processo.

Ao utilizar um pacote no R, na realidade estamos aproveitando as funções previamente criadas por outros desenvolvedores.

Quando criamos uma função, é fundamental definir claramente suas entradas (argumentos) e saídas (resultados a serem retornados).

Para criar uma função no R, utilizamos a estrutura básica da função function, conforme exemplificado abaixo:

nome_funcao = function(argumentos){
  # conjunto de comandos que 
  # serão realizados
}

Vamos exemplificar criando uma função que exiba a mensagem “Viciados no R!” sempre que for chamada:

#Criando a função e chamando de mensagem

mensagem = function(){
  print("Mensagem do além!")
}

#evocando a função
mensagem()
[1] "Mensagem do além!"

A função que definimos anteriormente não possui argumentos, como demonstrado com a função getwd().

Agora, vamos considerar a criação de uma função que calcule e retorne a soma de dois números.

#Criando uma função que soma dois números

minha_soma = function(x,y){
  valor = x + y
  return(valor)
}

minha_soma(x = 2, y = 4)
[1] 6

O que ocorre se, ao invés de somar dois números, tentarmos somar um número a uma letra?

minha_soma(x = 2, y = "h")

Nossa função resultará em um erro, porém, esse erro não foi especificamente detalhado. Podemos aprimorar a função aplicando os condicionamentos que estudamos anteriormente.

#Melhorando a função

minha_soma = function(x,y){
  if(class(x) != "numeric" | !is.numeric(y)){
    print("Você deve inserir dois números para que a função possa ser executada!")
  }else{
  valor = x + y
  return(valor)    
  }
}

minha_soma(x = 2, y = "h")
[1] "Você deve inserir dois números para que a função possa ser executada!"
minha_soma(x = "h", y = 2)
[1] "Você deve inserir dois números para que a função possa ser executada!"
minha_soma(x = 2, y = 4)
[1] 6

class(x) != “numeric” e !is.numeric(y) são duas formas distintas de perguntar se um objeto é um número no R.

Também é possível pré-definir alguns argumentos nas nossas funções.

#Criando uma função que calcula a potência de um número (a priori o número 10)
potencia = function(x,base = 10){
 valor = base^x
 return(valor)
}

#Calculando 10^3
potencia(x = 3)
[1] 1000
#Calculando 5^3
potencia(x = 3, base = 5)
[1] 125

Atividade: Crie uma função que calcula o valor de \(f(z)=3e^{−3z},z>0\). A função deve se chamar f.

Vamos plotar a função f(z) no intervalo de 0 a 3.

#Ativando pacotes
library(ggplot2)
library(tibble)

#Plotando o gráfico
ggplot(data = tibble(z = c(0,3)), 
       mapping = aes(x = z)) +
  stat_function(fun = f) +
  labs(y = "f(z)")

Para visualizarmos a função criada, utilizamos o geom_stat_function para plotar uma função específica. Observa-se que empregamos o recurso de criar um tibble no ggplot com uma única variável contendo dois valores: o mínimo e o máximo do eixo x. Estes valores delimitam a região na qual desejamos realizar o plot.