Pular para o conteúdo principal
Módulo 3 · Lição 1 de 25/10 no curso~12 min
Lições do módulo (1/2)

Funções de escrita

Em R, as funções são cidadãos de primeira classe (objetos por direito próprio) e permitem estruturar seu código em blocos modulares, reutilizáveis ​​e bem organizados.

Definindo uma Função

Para definir uma função, use a palavra-chave function e atribua o objeto criado a uma variável (o nome da função) usando o operador de atribuição <-:

R
# Simple function definition
greet_user <- function() {
  print("Hello, User!")
}

# Invoking the function
greet_user()

Parâmetros e valores de retorno

As funções podem aceitar um ou mais parâmetros. Para retornar explicitamente um valor, use a função return(). Se return() for omitido, R retornará automaticamente o valor da última expressão avaliada no corpo da função.

R
# Function that adds two numbers and returns the result
add_numbers <- function(a, b) {
  sum_result <- a + b
  return(sum_result)
}

total <- add_numbers(5, 7)
print(total) # Prints 12

Argumentos padrão

Você pode especificar valores padrão para os parâmetros de uma função. Se o argumento não for fornecido quando a função for invocada, R usará o valor padrão:

R
# The function uses a default discount rate of 10% (0.10)
apply_discount <- function(price, discount = 0.10) {
  discounted_price <- price * (1 - discount)
  return(discounted_price)
}

# Uses the default (10%)
print(apply_discount(100)) # Prints 90

# Specifies a custom discount (20%)
print(apply_discount(100, 0.20)) # Prints 80

Retornando vários valores com listas

Como uma função em R só pode retornar um único objeto diretamente via return(), se precisarmos retornar vários valores (possivelmente de diferentes tipos ou comprimentos), podemos agrupá-los dentro de uma lista (list):

R
get_stats <- function(v) {
  stats <- list(
    mean_val = mean(v),
    max_val = max(v)
  )
  return(stats)
}

results <- get_stats(c(10, 20, 30))
print(results$mean_val) # Prints 20

Funções anônimas e sapply

Funções anônimas (funções sem nome definido inline) são extremamente úteis quando combinadas com funções como sapply() para aplicar transformações rápidas em elementos de um vetor ou lista.

No R moderno (da versão 4.1.0 em diante), você pode definir funções anônimas usando a sintaxe abreviada \(x) além do clássico function(x):

R
v <- c(1, 2, 3)

# Using sapply with a classic anonymous function
sapply(v, function(x) x^2) # 1 4 9

# Using sapply with shorthand syntax (R >= 4.1.0)
sapply(v, \(x) x^2) # 1 4 9

Experimente você mesmo

Exercício#r.m3.l1.e1
Tentativas: 0Carregando…

Defina uma função chamada double_value que aceita um único argumento x e retorna seu duplo (x * 2) usando return().

Carregando editor…
Mostrar dica

Usa a sintaxe: double_value <- function(x) { return(x * 2) }

Solução disponível após 3 tentativas

Exercício#r.m3.l1.e2
Tentativas: 0Carregando…

Defina uma função chamada calcular_area que aceite dois argumentos: largura e altura. A função deve retornar seu produto usando return().

Carregando editor…
Mostrar dica

Defina a função com os parâmetros largura e altura e retorne largura * altura.

Solução disponível após 3 tentativas

Exercício#r.m3.l1.e3
Tentativas: 0Carregando…

Defina uma função chamada calcular_tax que aceite um valor de argumento obrigatório e uma taxa de argumento opcional com um valor padrão de 0,22. Devolva o valor do produto * taxa.

Carregando editor…
Mostrar dica

EUA: calcular_tax <- function(valor, taxa = 0,22) { return(valor * taxa) }

Solução disponível após 3 tentativas

Exercício#r.m3.l1.e4
Tentativas: 0Carregando…

Defina uma função chamada analyze_vector que aceita um vetor v. A função deve retornar uma lista contendo dois elementos denominados sum (a soma do vetor, calculada com sum(v)) e len (o comprimento do vetor, calculado com length(v)).

Carregando editor…
Mostrar dica

Use a sintaxe: analyze_vector <- function(v) { return(list(sum = sum(v), len = length(v))) }

Solução disponível após 3 tentativas

Exercício#r.m3.l1.e5
Tentativas: 0Carregando…

Dado o vetor v, use a função sapply() com uma função anônima para triplicar o valor de cada elemento (multiplicando por 3). Salve o resultado na variável triplicada.

Carregando editor…
Mostrar dica

Uso: triplicado <- sapply(v, function(x) x * 3)

Solução disponível após 3 tentativas