Menu
Coddy logo textTech

Reduce

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

Reduce(f, x)는 x의 요소들을 하나의 값으로 결합합니다. 처음 두 요소에 f를 호출한 다음, 그 결과와 세 번째 요소에 호출하고, 이런 식으로 계속합니다. +를 사용하면 모든 값을 더합니다:

print(Reduce(function(acc, x) acc + x, c(3, 5, 10)))
print(Reduce(`+`, 1:5))

출력:

[1] 18
[1] 15

+와 같은 연산자도 함수입니다. 백틱으로 작성한 `+`는 다른 함수와 마찬가지로 전달할 수 있습니다. Reduce()는 두 단어 중 더 긴 단어를 유지하는 경우처럼 조합을 위한 내장 함수가 없을 때 가장 유용합니다.

longer <- function(a, b) if (nchar(b) > nchar(a)) b else a
print(Reduce(longer, c("fig", "banana", "kiwi", "cherry")))

출력:

[1] "banana"

세 번째 인수인 init은 시작 값입니다. 이는 첫 번째 acc로 사용되며, x가 비어 있을 때의 결과이기도 합니다:

print(Reduce(`+`, c(), 0))
print(Reduce(function(acc, w) paste0(acc, toupper(substr(w, 1, 1))), c("portable", "network", "graphics"), ""))

출력:

[1] 0
[1] "PNG"

accumulate = TRUE는 마지막 결과만 반환하는 대신 모든 중간 결과를 반환하며, 이를 통해 누적 합계를 얻을 수 있습니다:

deposits <- c(100, -30, 50, -80)
print(Reduce(`+`, deposits, accumulate = TRUE))

출력:

[1] 100  70 120  40
challenge icon

챌린지

쉬움

running_balance(start, changes)를 완성하세요. start에서 시작하여 각 변경 사항을 순서대로 적용하세요. 각 변경 사항을 적용한 후의 잔액을 한 줄씩 반환하세요. 예: after 1: 70. 마지막 줄에는 lowest: 뒤에 도달한 최저 잔액을 표시하세요(start 포함).

제공된 코드는 시작 잔액과 변경 사항을 쉼표로 구분된 한 줄로 읽고, 반환된 각 줄을 출력합니다.

직접 해보기

running_balance <- function(start, changes) {
  # 여기에 코드를 작성하세요
  character(0)
}

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

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

논리와 흐름의 모든 레슨

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