vapply() vs. sapply()
이전 예시에서 sapply()가 단순화에 실패한 이유는 market_crash2의 date 요소가 두 개의 클래스(POSIXct와 POSIXt)를 가지고 있었기 때문이에요. 하지만 오류는 발생하지 않았죠! 만약 여러분이 작성한 함수가 sapply()가 단순화한 벡터를 반환하리라고 기대했다면, 이는 혼란스러울 수 있어요.
이를 보완하기 위해 보다 엄격한 적용 함수인 vapply()가 있어요. vapply()에는 추가 인수 FUN.VALUE가 있어, 적용되는 함수가 호출될 때마다 반환되어야 하는 출력의 타입과 길이를 지정할 수 있어요.
class()의 반환값이 길이가 1인 문자 벡터라고 ‘기대’한다면, vapply()로 다음과 같이 지정할 수 있어요:
vapply(market_crash, class, FUN.VALUE = character(1))
dow_jones_drop date
"numeric" "Date"
FUN.VALUE의 다른 예로는 numeric(2)나 logical(1) 등이 있어요. market_crash2는 다시 준비되어 있어요.
이 연습은 강의의 일부입니다
금융을 위한 R 중급
연습 안내
sapply()를 다시 사용해market_crash2각 요소의class()를 확인해 보세요. 오류가 아니라 리스트를 반환하는 점에 주목하세요.vapply()를market_crash2에 적용해class()를 구해 보세요.FUN.VALUE = character(1)을 지정하세요. 적절하게 실패해야 해요.
실습형 인터랙티브 연습
이 예제를 이 샘플 코드를 완성하여 풀어보세요.
# Market crash with as.POSIXct()
market_crash2 <- list(dow_jones_drop = 777.68,
date = as.POSIXct("2008-09-28"))
# Find the classes with sapply()
___
# Find the classes with vapply()
___