Menu
Coddy logo textTech

익명 함수

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

R에서 함수는 숫자나 문자열과 같은 값입니다. function(x) x * 2는 이름을 지정하지 않고 함수를 생성하며, 마지막 표현식의 값이 함수가 반환하는 값입니다:

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

출력:

[1] 42
[1] 10

R 4.1에서는 간결한 형식이 추가되었습니다. \(x)는 function(x)와 같은 의미입니다. 본문에 여러 줄이 필요할 때는 중괄호를 사용하세요.

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

출력:

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

함수는 값이므로 리스트는 여러 함수를 이름 아래에 저장할 수 있습니다. ops[["inc"]]는 함수이므로 ops[["inc"]](5)로 호출합니다:

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

출력:

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

함수는 이름이 있는 함수와 마찬가지로 여러 인수를 받고 그중 일부에 기본값을 지정할 수 있습니다.

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

출력:

[1] 9
[1] 15
challenge icon

챌린지

쉬움

ops 목록을 하나의 인수를 받는 익명 함수 세 개로 완성하세요:

  • double은 인수에 2를 곱한 값을 반환합니다
  • square는 인수에 자기 자신을 곱한 값을 반환합니다
  • negate는 인수의 부호를 반전한 값을 반환합니다

제공된 코드는 연산 이름과 숫자를 읽고, ops에서 해당 함수를 호출한 다음 결과를 출력합니다.

직접 해보기

ops <- list(
  # 여기에 코드를 작성하세요
  double = function(x) x
)

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

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

논리와 흐름의 모든 레슨

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