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 <-:
# 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.
# 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 12Argumentos 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:
# 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 80Retornando 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):
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 20Funçõ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):
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 9Experimente você mesmo
Defina uma função chamada double_value que aceita um único argumento x e retorna seu duplo (x * 2) usando return().
Mostrar dica
Usa a sintaxe: double_value <- function(x) { return(x * 2) }
Solução disponível após 3 tentativas
Defina uma função chamada calcular_area que aceite dois argumentos: largura e altura. A função deve retornar seu produto usando return().
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
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.
Mostrar dica
EUA: calcular_tax <- function(valor, taxa = 0,22) { return(valor * taxa) }
Solução disponível após 3 tentativas
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)).
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
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.
Mostrar dica
Uso: triplicado <- sapply(v, function(x) x * 3)
Solução disponível após 3 tentativas