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] 9sapply()는 같은 작업을 수행하며 결과를 단순화합니다. 모든 호출이 하나의 값을 반환하면 리스트 대신 일반 벡터를 얻습니다:
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챌린지
쉬움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")
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
논리와 흐름의 모든 레슨
직접 연습해 보세요: 온라인 R 컴파일러