Menu
Coddy logo textTech

함수 전달하기

Coddy R 여정의 논리와 흐름 섹션에 포함된 레슨. 64개 중 28번째.

함수는 다른 함수를 인수로 받아 호출할 수 있습니다. 아래의 apply_twice()는 인수가 하나인 모든 함수와 함께 작동합니다:

apply_twice <- function(f, x) f(f(x))
print(apply_twice(\(x) x + 3, 10))
print(apply_twice(toupper, "ok"))

출력:

[1] 16
[1] "OK"

sum, max 또는 toupper와 같은 내장 함수도 값이므로 괄호 없이 이름으로 전달하세요. 괄호를 사용하면 대신 호출됩니다:

summarize <- function(xs, how) how(xs)
print(summarize(c(4, 9, 2), max))
print(summarize(c(4, 9, 2), sum))

출력:

[1] 9
[1] 15

조건자, 즉 TRUE 또는 FALSE를 반환하는 함수를 받는 함수는 어떤 규칙으로든 값을 세거나 선택할 수 있습니다:

count_if <- function(xs, keep) {
  n <- 0
  for (x in xs) if (keep(x)) n <- n + 1
  n
}
print(count_if(c(3, 8, 10, 5), \(x) x %% 2 == 0))
print(count_if(c(3, 8, 10, 5), \(x) x > 4))

출력:

[1] 2
[1] 3

호출자가 동작을 결정하고 함수가 반복문을 제공하므로, 하나의 함수로 다양한 경우를 처리할 수 있습니다:

transform_each <- function(xs, f) {
  out <- c()
  for (x in xs) out <- c(out, f(x))
  out
}
print(transform_each(1:4, \(x) x * 10))
print(transform_each(c("a", "b"), toupper))

출력:

[1] 10 20 30 40
[1] "A" "B"
challenge icon

챌린지

쉬움

apply_n(f, x, n)을 완성하세요. f를 x에 적용한 다음, 그 결과에 다시 적용하는 과정을 총 n번 수행하고 최종 값을 반환하세요. n이 0이면 x를 변경하지 않고 반환하세요.

제공된 코드는 double, inc, half라는 세 함수를 정의합니다. 이 중 하나의 이름과 시작 값 및 n을 읽고, apply_n()의 결과를 출력합니다.

직접 해보기

apply_n <- function(f, x, n) {
  # 여기에 코드를 작성하세요
  x
}

# 제공된 입력/출력 코드: 그대로 유지하세요
input <- suppressWarnings(readLines(file("stdin")))
ops <- list(double = \(x) x * 2, inc = \(x) x + 1, half = \(x) x / 2)
cat(apply_n(ops[[input[1]]], as.numeric(input[2]), as.numeric(input[3])), sep = "\n")
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

논리와 흐름의 모든 레슨

직접 연습해 보세요: 온라인 R 컴파일러