함수 반환하기
Coddy R 여정의 논리와 흐름 섹션에 포함된 레슨. 64개 중 29번째.
함수는 함수를 반환할 수도 있습니다. make_multiplier(3)은 인수에 3을 곱하는 새로운 함수를 반환합니다:
make_multiplier <- function(n) {
function(x) x * n
}
triple <- make_multiplier(3)
print(triple(5))
print(make_multiplier(10)(5))출력:
[1] 15
[1] 50반환된 함수는 자신을 만들 때 사용된 값들을 기억합니다. 함수와 그 주변의 변수들이 결합된 것을 클로저라고 합니다. 메이커를 호출할 때마다 별도의 클로저가 만들어집니다:
make_greeter <- function(greeting) {
function(name) paste0(greeting, ", ", name, "!")
}
hello <- make_greeter("Hello")
hola <- make_greeter("Hola")
print(hello("Ada"))
print(hola("Ada"))출력:
[1] "Hello, Ada!"
[1] "Hola, Ada!"메이커 함수는 몇 가지 설정을 단위 간 변환기와 같은 바로 사용할 수 있는 도구로 만들어 줍니다:
make_converter <- function(factor, offset = 0) {
function(x) x * factor + offset
}
c_to_f <- make_converter(1.8, 32)
km_to_miles <- make_converter(0.621)
print(c_to_f(100))
print(km_to_miles(10))출력:
[1] 212
[1] 6.21함수는 새로운 함수로 결합할 수 있습니다. compose(f, g)는 f를 실행한 다음 g를 실행하는 함수를 반환합니다:
compose <- function(f, g) function(x) g(f(x))
clean <- compose(trimws, toupper)
print(clean(" hi there "))출력:
[1] "HI THERE"챌린지
쉬움make_formatter(prefix, digits)를 완성하세요. 이 함수는 숫자를 받아 prefix 뒤에 digits개의 소수 자릿수로 표시한 숫자를 반환하는 함수를 반환합니다. make_formatter("$", 2)(3.5)는 $3.50을 반환합니다.
sprintf("%.*f", digits, x)는 x를 digits개의 소수 자릿수로 형식화합니다.
제공된 코드는 접두사, 소수 자릿수, 쉼표로 구분된 숫자 목록을 읽습니다. 포매터 하나를 만든 다음 각 숫자에 대한 결과를 출력합니다.
직접 해보기
make_formatter <- function(prefix, digits) {
# 여기에 코드를 작성하세요
function(x) ""
}
# 제공된 입력/출력 코드: 그대로 유지하세요
input <- suppressWarnings(readLines(file("stdin")))
fmt <- make_formatter(input[1], as.integer(input[2]))
for (x in as.numeric(strsplit(input[3], ",")[[1]])) cat(fmt(x), "\n", sep = "")
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
논리와 흐름의 모든 레슨
직접 연습해 보세요: 온라인 R 컴파일러