5.6.3 vapply
sapply는 다루기 쉽고 편하지만, 이 점이 반대로 독이 될 수도 있다. 다음과 같이 리스트를 입력해 보자.
> x <- list(c(1, 2), c(2, 3), c(1, 3))
x 안의 숫자들을 제곱한 값을 원소로 하는 수치형 벡터를 얻고자 할 때 sapply는 자동으로 결과 구조를 데이터에 맞게 조정한다.
> sapply(x, function(x) x ^ 2)
[,1] [,2] [,3]
[1,] 1 4 1
[2,] 4 9 9
하지만 입력 데이터에 실수나 변형이 있다면 sapply() 함수는 이것까지 조용히 허용하여 예측하지 못한 결과를 초래하기도 한다. 예를 들어 x의 마지막 요소에 잘못해서 숫자 하나가 더 들어갔다고 하자.
> x1 <- list(c(1, 2), c(2, 3), c(1, 3, 3))