더북(TheBook)

다시 students 객체 코드로 돌아와 students 객체를 사용한 반복 연산이 서로 독립적임을 확인할 수 있다. 다시 말해 James에 대한 연산은 Jenny를 비롯한 다른 학생과는 아무런 관련이 없다. 따라서 다음과 같이 lapply를 활용할 수 있다.

> lapply(students, function(s) {
+     type <- switch(s$gender, "M" = "man", "F" = "woman")
+     interest <- paste(s$interest, collapse = ", ")
+     sprintf("%s, %d year-old %s, loves %s.", s$name, s$age, type, interest)
+ })
$a1
[1] "James, 25 year-old man, loves reading, writing."

$a2
[1] "Jenny, 23 year-old woman, loves cooking."

$a3
[1] "David, 24 year-old man, loves running, basketball."

앞선 예제에서는 객체로 할당되지 않은 익명 함수를 사용한다. 다시 말해 이 함수는 임시이며 이름이 따로 없다. 이 함수를 어떤 기호로 선언할 수도 있는데, 이 기호가 결국 함수 이름이 되고 lapply에서 이 이름을 사용할 수도 있다.

그럼에도 여전히 코드 자체는 단순하다. students의 각 s 요소에 대해 이 함수는 학생 종류와 관심 사항을 쉼표로 연결한다. 그리고 우리가 원하는 형식으로 이 정보를 수집한다.

다행히 lapply를 사용하는 방법에서 핵심 내용은 다른 apply 계통의 함수에서도 동일하다. 물론 구체적인 반복 메커니즘이나 결과 유형은 조금씩 다를 수 있다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.