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] 10O 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] 15Desafio
FácilComplete a lista ops com três funções anônimas de um argumento:
doubleretorna o argumento multiplicado por 2squareretorna o argumento multiplicado por ele mesmonegateretorna 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")
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
1Strings em Profundidade
Substrings com substr()Formatação com sprintf()Dividindo e UnindoPesquisando StringsSubstituindo TextoRecapitulação - Criador de Nome de Usuário4Matrizes
Criando MatrizesIndexando MatrizesResumos de Linhas e ColunasAritmética de MatrizesRecapitulação - Tabela de Assentos10Fluxo de Controle Avançado
A Função switch()ifelse() Vetorizadorepeat e breakFunções RecursivasRevisão — Classificador de Notas2Consultas de Chave-Valor
Consultas em Vetores NomeadosVerificando ChavesAdicionando e Removendo ChavesPercorrendo NomesRecapitulação - Mesa de Ações5Projeto - Boletim de Notas
Adicionando AlunosRegistrando Notas3Conjuntos e Contagem
Valores ÚnicosOperações com ConjuntosTestes de PertinênciaContagem com table()Recapitulação - Convidados do Evento6Funções como Valores
Funções AnônimasPassando FunçõesRetornando FunçõesClosures com EstadoRecapitulação - Regras de Desconto9Data Frames
Criando Data FramesColunas e LinhasFiltrando LinhasAdicionando e OrdenandoRecapitulação - Relatório de Vendas12Projeto - Rastreador de Despesas
Registro de DespesasGastos TotaisPratique por conta própria: Compilador de R online