vapply() so với sapply()
Trong ví dụ trước, sapply() không thể rút gọn vì phần tử date của market_crash2 có hai lớp (POSIXct và POSIXt). Tuy vậy, không hề có lỗi nào được ném ra! Nếu một hàm bạn viết kỳ vọng sapply() trả về một vector đã được rút gọn, điều này sẽ gây bối rối.
Để xử lý trường hợp này, có một hàm apply nghiêm ngặt hơn là vapply(), chứa đối số bổ sung FUN.VALUE cho phép bạn chỉ định kiểu và độ dài của đầu ra cần trả về mỗi lần hàm được áp dụng được gọi.
Nếu bạn KỲ VỌNG giá trị trả về của class() là một vector ký tự có độ dài 1, bạn có thể chỉ định điều đó bằng vapply():
vapply(market_crash, class, FUN.VALUE = character(1))
dow_jones_drop date
"numeric" "Date"
Các ví dụ khác của FUN.VALUE có thể là numeric(2) hoặc logical(1). market_crash2 đã được định nghĩa sẵn cho bạn.
Bài tập này là một phần của khóa học
R trung cấp cho Tài chính
Hướng dẫn bài tập
- Dùng lại
sapply()để tìmclass()của các phần tử trongmarket_crash2. Hãy để ý rằng nó trả về một list chứ không phải lỗi. - Dùng
vapply()trênmarket_crash2để tìmclass(). Chỉ địnhFUN.VALUE = character(1). Nó sẽ thất bại một cách phù hợp.
Bài tập tương tác thực hành trực tiếp
Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.
# 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()
___