R Academy · 강의

map()과 형식별 변형

map(), map_dbl(), map_chr(), map_lgl()로 목록에 함수를 적용합니다.

레슨 1/413개 단계

map()과 형식별 변형은(는) CoddyKit의 무료 R Academy 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 R Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. R Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

purrr를 활용한 함수형 프로그래밍

purrr 패키지는 R에서 함수형 프로그래밍을 위한 일관되고 형식이 안전한 도구를 제공합니다. for 반복문을 작성하는 대신 목록이나 벡터에 함수를 매핑합니다. 그 결과 코드를 더 깔끔하게 작성할 수 있고 동작을 이해하고 조합하기도 쉬워집니다.

library(purrr)

# A list of numbers
numbers <- list(1, 4, 9, 16, 25)

# Apply sqrt() to each element
result <- map(numbers, sqrt)
print(result)

map() — 항상 목록 반환

map(.x, .f)는 .x의 각 요소에 함수 .f를 적용하고 목록을 반환합니다. 입력은 목록, 벡터 또는 데이터 프레임일 수 있습니다(데이터 프레임의 경우 열을 순회합니다). 가장 일반적인 map 변형입니다.

library(purrr)

# Map over a character vector
fruits <- c('apple', 'banana', 'cherry')

# nchar() counts characters in each string
result <- map(fruits, nchar)
print(result)  # Returns a list
print(class(result))

map_dbl() — 숫자형 벡터 반환

map_dbl(.x, .f)는 .x에 .f를 매핑하고 숫자형(double) 벡터를 반환합니다. 결과 중 하나라도 단일 숫자 값이 아니면 오류를 발생시킵니다. 이러한 형식 안전성은 버그를 조기에 찾아냅니다.

library(purrr)

groups <- list(
  A = c(10, 20, 30),
  B = c(5, 15, 25, 35),
  C = c(100, 200)
)

# Compute mean for each group — returns a named numeric vector
means <- map_dbl(groups, mean)
print(means)
print(class(means))

map_chr() — 문자형 벡터 반환

map_chr(.x, .f)는 함수를 매핑한 후 문자형 벡터를 반환합니다. 문자열 속성 추출, 결과 형식 지정, 파일 경로 구성에 유용합니다. 함수는 각 요소마다 하나의 문자열을 반환해야 합니다.

library(purrr)

models <- list(
  m1 = lm(mpg ~ wt, data=mtcars),
  m2 = lm(mpg ~ hp, data=mtcars),
  m3 = lm(mpg ~ cyl, data=mtcars)
)

# Extract the formula from each model as a string
map_chr(models, function(m) deparse(formula(m)))

map_lgl() — 논리형 벡터 반환

map_lgl(.x, .f)는 TRUE/FALSE 값으로 이루어진 논리형 벡터를 반환합니다. 목록 전체에서 조건을 검사할 때 적합합니다. 예를 들어 어떤 요소가 기준을 충족하는지 확인할 수 있습니다.

library(purrr)

datasets <- list(
  df1 = data.frame(x=1:3, y=c(NA,2,3)),
  df2 = data.frame(x=1:3, y=4:6),
  df3 = data.frame(x=c(NA,NA,3), y=1:3)
)

# Does each data frame contain any NA values?
map_lgl(datasets, function(df) anyNA(df))

map_int() — 정수형 벡터 반환

map_int(.x, .f)는 정수형 벡터를 반환합니다. 함수가 개수, 인덱스 또는 기타 정수 결과를 반환할 때 사용하십시오. 참고로 R에서 length()와 nrow()는 정수를 반환합니다.

library(purrr)

my_lists <- list(
  a = 1:10,
  b = letters[1:5],
  c = c(TRUE, FALSE, TRUE, TRUE)
)

# Count elements in each list item
map_int(my_lists, length)

map_df() / map_dfr() — 데이터 프레임 반환

map_df(.x, .f)(별칭: map_dfr())는 .f를 적용한 다음 결과를 행으로 결합하여 하나의 데이터 프레임으로 만듭니다. 이 함수는 각 요소에 대해 데이터 프레임 또는 티블을 반환해야 합니다. map_dfc()는 대신 열을 결합합니다.

library(purrr)

files <- c('sales_q1', 'sales_q2', 'sales_q3')

# Simulate reading and labeling each file
map_df(files, function(f) {
  data.frame(
    file = f,
    rows = sample(50:100, 1),
    cols = 5
  )
})

~를 사용한 익명 함수

purrr는 익명 함수에 사용할 수 있는 간결한 수식 축약 문법을 지원합니다. ~expr에서 .x는 현재 요소를 가리킵니다. 따라서 function(x) expr를 작성하지 않아도 되며 코드도 간결하게 유지할 수 있습니다. 두 방식은 동일하게 작동합니다.

library(purrr)

numbers <- list(1, 4, 9, 16, 25)

# Three equivalent ways:
result1 <- map(numbers, function(x) x^2)
result2 <- map(numbers, ~.x^2)
result3 <- map_dbl(numbers, ~.x^2)

print(result2)
print(result3)

이름이 지정된 목록에 매핑하기

.x가 이름이 지정된 목록 또는 벡터이면 map()의 출력에도 해당 이름이 유지됩니다. map_dbl() 및 다른 형식 지정 변형도 이름을 그대로 전달하므로 결과만 보아도 의미를 파악할 수 있습니다.

library(purrr)

region_data <- list(
  East = c(100, 120, 115, 130),
  West = c(200, 195, 210, 205),
  North = c(80, 85, 90, 88)
)

# Named results
map_dbl(region_data, mean)

데이터 프레임 열에 map() 사용하기

데이터 프레임은 열의 목록입니다. map(df, fn)은 각 열에 fn을 적용합니다. 이를 map_dbl()과 함께 사용하면 모든 열의 통계량을 한 번에 계산할 수 있습니다.

library(purrr)

df <- data.frame(
  score_a = c(85, 90, 78, 92),
  score_b = c(88, 85, 80, 95),
  score_c = c(92, 88, 84, 90)
)

# Mean of every column
map_dbl(df, mean)

map() 호출 중첩하기

여러 수준의 반복을 위해 map() 호출을 중첩할 수 있습니다. 바깥쪽 map은 그룹을 순회하고 안쪽 map은 매개변수를 순회합니다. 이렇게 하면 중첩된 for 반복문을 깔끔하고 조합 가능한 구조로 바꿀 수 있습니다. 가독성을 위해 중첩 깊이는 2수준으로 유지하십시오.

library(purrr)

groups <- list(A = 1:5, B = 6:10)
functions <- list(mean=mean, sd=sd, min=min)

# Apply each function to each group
map(groups, function(g) {
  map_dbl(functions, function(f) f(g))
})

빠른 확인

map()과 map_dbl()의 핵심적인 차이는 무엇입니까?

복습: map()과 형식 지정 변형

map()과 형식 지정 변형의 핵심 내용:

  • map(.x, .f) — 항상 목록을 반환하며 가장 유연합니다
  • map_dbl() — 숫자형 벡터를 반환하며 잘못된 형식이면 오류가 발생합니다
  • map_chr() — 문자형 벡터를 반환합니다
  • map_lgl() — 논리형 벡터를 반환합니다
  • map_int() — 정수형 벡터를 반환합니다
  • map_df() / map_dfr() — 결과를 행으로 결합하여 데이터 프레임을 만듭니다
  • ~.x 축약형 — 간결한 익명 함수 문법입니다
  • 이름이 지정된 입력은 자동으로 이름이 지정된 출력을 만듭니다
library(purrr)

# Typed map showcase
data_list <- list(
  group_A = c(10, 20, 30),
  group_B = c(5, 15),
  group_C = c(100, 200, 300, 400)
)

cat('Counts:', map_int(data_list, length), '\n')
cat('Means: ', map_dbl(data_list, mean), '\n')
cat('Any>50:', map_lgl(data_list, ~any(.x > 50)), '\n')
무료로 시작

AI 튜터와 함께 R을(를) 배우세요 — 무료

브라우저에서 실제 코드를 작성하고 실행하며, 24/7 AI 튜터로부터 즉각적인 도움을 받고, 웹이나 앱에서 중단한 부분부터 계속 학습하세요.

코스
43
레슨
159

자주 묻는 질문

“map()과 형식별 변형” 강의는 무료인가요?

네 — “map()과 형식별 변형” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 R Academy 강의 전체를 잠금 해제할 수 있습니다. R Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“map()과 형식별 변형”에서 뭘 배우나요?

map(), map_dbl(), map_chr(), map_lgl()로 목록에 함수를 적용합니다. 브라우저에서 직접 실행하는 실습 코드로 R Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

R Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 R Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.

“map()과 형식별 변형” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 R Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 R Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. map()과 형식별 변형
  2. 여러 입력을 위한 map2()와 pmap()
  3. reduce(), accumulate(), walk()
  4. keep(), discard(), 목록 필터링
← R Academy(으)로 돌아가기