더북(TheBook)

lapply()

lapply( )는 리스트를 반환하는 특징이 있는 apply 계열 함수다.

표 4-9 lapply( ) 및 그 결과를 처리하기 위한 함수

lapply : 벡터, 리스트, 표현식, 데이터 프레임 등에 함수를 적용하고 그 결과를 리스트로 반환한다.

lapply(
  X,    # 벡터, 리스트, 표현식 또는 데이터 프레임
  FUN,  # 적용할 함수
  ...   # 추가 인자. 이 인자들은 FUN에 전달된다.
)

반환 값은 X와 같은 길이의 리스트다.

리스트보다는 벡터 또는 데이터 프레임이 사용하기에 직관적인 면이 있으므로 lapply( )의 결과를 벡터 또는 데이터 프레임으로 변환할 필요가 있다. 이 경우 다음과 같은 함수를 사용한다.

표 4-10 리스트를 다른 데이터 타입으로 변환하는 함수

unlist : 리스트 구조를 벡터로 변환한다.

unlist(
  x,                # R 객체. 보통 리스트 또는 벡터
  recursive=FALSE,  # x에 포함된 리스트 역시 재귀적으로 변환할지 여부
  use.names=TRUE    # 리스트 내 값의 이름을 보존할지 여부
)

반환 값은 벡터다.

do.call : 함수를 리스트로 주어진 인자에 적용하여 결과를 반환한다.

do.call(
  what,  # 호출할 함수
  args,  # 함수에 전달할 인자의 리스트
)

반환 값은 함수 호출 결과다.

c(1, 2, 3) 벡터가 있을 때, 각 숫자를 2배한 값을 lapply( )를 통해 구해보자. 앞서 ‘2.5 리스트’ 절에서 살펴봤듯이, 리스트의 각 값은 [[n]] 형태로 접근한다는 점을 기억하기 바란다(이때 n은 접근할 요소의 색인이다).

> (result <- lapply(1:3, function(x) { x*2 }))
[[1]]
[1] 2

[[2]]
[1] 4

[[3]]
[1] 6

> result[[1]]
[1] 2

위의 예처럼 lapply( )의 결과는 리스트다. 이 결과를 다시 벡터로 변환하고 싶다면 unlist( )를 사용한다.

> unlist(result)
[1] 2 4 6
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.