lapply()
lapply( )는 리스트를 반환하는 특징이 있는 apply 계열 함수다.
lapply : 벡터, 리스트, 표현식, 데이터 프레임 등에 함수를 적용하고 그 결과를 리스트로 반환한다. |
lapply( X, # 벡터, 리스트, 표현식 또는 데이터 프레임 FUN, # 적용할 함수 ... # 추가 인자. 이 인자들은 FUN에 전달된다. ) 반환 값은 X와 같은 길이의 리스트다. |
리스트보다는 벡터 또는 데이터 프레임이 사용하기에 직관적인 면이 있으므로 lapply( )의 결과를 벡터 또는 데이터 프레임으로 변환할 필요가 있다. 이 경우 다음과 같은 함수를 사용한다.
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