익명 함수
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] 10R 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챌린지
쉬움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")
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
논리와 흐름의 모든 레슨
직접 연습해 보세요: 온라인 R 컴파일러