vapply() vs. sapply()
Pada contoh terakhir, sapply() gagal menyederhanakan karena elemen date dari market_crash2 memiliki dua kelas (POSIXct dan POSIXt). Namun, perhatikan bahwa tidak ada error yang muncul! Jika fungsi yang Anda tulis mengharapkan sapply() mengembalikan vektor yang sudah disederhanakan, hal ini bisa membingungkan.
Untuk mengatasinya, ada fungsi apply yang lebih ketat bernama vapply(), yang memiliki argumen tambahan FUN.VALUE tempat Anda dapat menentukan tipe dan panjang keluaran yang harus dikembalikan setiap kali fungsi yang Anda terapkan dipanggil.
Jika Anda mengharapkan nilai balik class() berupa vektor karakter dengan panjang 1, Anda dapat menentukannya menggunakan vapply():
vapply(market_crash, class, FUN.VALUE = character(1))
dow_jones_drop date
"numeric" "Date"
Contoh lain FUN.VALUE bisa berupa numeric(2) atau logical(1). market_crash2 kembali disediakan untuk Anda.
Latihan ini adalah bagian dari kursus
R Tingkat Menengah untuk Keuangan
Petunjuk latihan
- Gunakan
sapply()lagi untuk mencariclass()dari elemen-elemenmarket_crash2. Perhatikan bahwa fungsi ini mengembalikan sebuah list dan bukan error. - Gunakan
vapply()padamarket_crash2untuk mencariclass(). TentukanFUN.VALUE = character(1). Fungsi ini seharusnya gagal sebagaimana mestinya.
Latihan interaktif praktis
Cobalah latihan ini dengan menyelesaikan kode contoh berikut.
# 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()
___