Menu
Coddy logo textTech

lapply와 sapply

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

lapply(x, f)는 x의 각 요소에 f를 호출하고, 결과를 입력 하나당 하나의 요소로 구성된 리스트로 반환합니다:

squares <- lapply(1:3, function(i) i^2)
print(length(squares))
print(squares[[3]])

출력:

[1] 3
[1] 9

sapply()는 같은 작업을 수행하며 결과를 단순화합니다. 모든 호출이 하나의 값을 반환하면 리스트 대신 일반 벡터를 얻습니다:

print(sapply(1:3, function(i) i^2))
print(sapply(c(4, 9, 16), sqrt))

출력:

[1] 1 4 9
[1] 2 3 4

문자 벡터에 대해 sapply()는 입력을 기준으로 결과의 이름을 지정합니다. 이름이 없는 일반 벡터를 얻으려면 USE.NAMES = FALSE를 추가하세요:

words <- c("tea", "coffee")
print(sapply(words, nchar))
print(sapply(words, nchar, USE.NAMES = FALSE))

출력:

   tea coffee 
     3      6 
[1] 3 6

이 함수들은 한 번에 한 요소씩 결과를 만드는 반복문을 대체합니다. 아래의 두 버전은 각각의 단어에 포함된 모음의 개수를 계산합니다:

words <- c("banana", "sky", "idea")
vowels <- function(w) sum(strsplit(w, "")[[1]] %in% c("a", "e", "i", "o", "u"))
counts <- c()
for (w in words) counts <- c(counts, vowels(w))
print(counts)
print(sapply(words, vowels, USE.NAMES = FALSE))

출력:

[1] 3 0 3
[1] 3 0 3
challenge icon

챌린지

쉬움

vowel_counts(words)를 완성하세요. 단어마다 한 줄씩 banana: 3 형식으로 반환하며, 해당 단어에 포함된 모음(a, e, i, o, u)의 개수를 표시하세요. 모든 단어의 모음 개수를 세려면 sapply()를 사용하세요.

제공된 코드는 단어를 소문자 단어로 이루어진 쉼표로 구분된 한 줄로 읽고, 반환된 각 줄을 출력합니다.

직접 해보기

vowel_counts <- function(words) {
  # 여기에 코드를 작성하세요
  character(0)
}

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

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

논리와 흐름의 모든 레슨

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