Menu
Coddy logo textTech

Funções Anônimas

Parte da seção Lógica e Fluxo do Journey de R da Coddy. Lição 27 de 64.

Em R, uma função é um valor como um número ou uma string. function(x) x * 2 cria uma função sem atribuir um nome a ela, e o valor de sua última expressão é o que ela retorna:

double <- function(x) x * 2
print(double(21))
print((function(x) x + 1)(9))

Saída:

[1] 42
[1] 10

O R 4.1 adicionou uma forma abreviada: \(x) significa o mesmo que function(x). Use chaves quando o corpo precisar de várias linhas:

square <- \(x) x^2
label <- function(x) {
  size <- if (x > 10) "big" else "small"
  paste(x, "is", size)
}
print(square(4))
print(label(12))

Saída:

[1] 16
[1] "12 is big"

Como as funções são valores, uma lista pode conter várias delas sob nomes. ops[["inc"]] é uma função, então ops[["inc"]](5) a chama:

ops <- list(inc = \(x) x + 1, neg = \(x) -x)
print(ops[["inc"]](5))
print(names(ops))

Saída:

[1] 6
[1] "inc" "neg"

Uma função pode receber vários argumentos e definir valores padrão para alguns deles, exatamente como uma função nomeada:

area <- \(w, h = w) w * h
print(area(3))
print(area(3, 5))

Saída:

[1] 9
[1] 15
challenge icon

Desafio

Fácil

Complete a lista ops com três funções anônimas de um argumento:

  • double retorna o argumento multiplicado por 2
  • square retorna o argumento multiplicado por ele mesmo
  • negate retorna o argumento com o sinal invertido

O código fornecido lê o nome de uma operação e um número, chama essa função de ops e imprime o resultado.

Experimente você mesmo

ops <- list(
  # Escreva seu código aqui
  double = function(x) x
)

# Código de entrada/saída fornecido: mantenha-o como está
input <- suppressWarnings(readLines(file("stdin")))
f <- ops[[input[1]]]
cat(f(as.numeric(input[2])), sep = "\n")
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Lógica e Fluxo

Pratique por conta própria: Compilador de R online