เริ่มต้นใช้งานเริ่มต้นใช้งานได้ฟรี

vapply() เทียบกับ sapply()

ในตัวอย่างก่อนหน้า sapply() ไม่สามารถย่อผลลัพธ์ได้ เนื่องจากคอลัมน์ date ใน market_crash2 มีสองคลาส (POSIXct และ POSIXt) แต่สังเกตว่าไม่มีข้อผิดพลาดเกิดขึ้นเลย! หากฟังก์ชันที่คุณเขียนคาดหวังว่า sapply() จะคืนค่าเป็นเวกเตอร์ที่ย่อแล้ว พฤติกรรมนี้อาจทำให้สับสนได้

เพื่อรับมือกับปัญหานี้ R มีฟังก์ชัน apply ที่เข้มงวดกว่าชื่อว่า vapply() ซึ่งมีอาร์กิวเมนต์พิเศษ FUN.VALUE ให้ระบุประเภทและความยาวของผลลัพธ์ที่ต้องการจากการเรียกฟังก์ชันแต่ละครั้ง

หากคาดหวังว่าผลลัพธ์ของ class() จะเป็นเวกเตอร์ประเภท character ที่มีความยาว 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() เพื่อหาคลาสด้วย class() ของแต่ละองค์ประกอบใน market_crash2 สังเกตว่าผลลัพธ์ที่ได้เป็นลิสต์ ไม่ใช่ข้อผิดพลาด
  • ใช้ 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()
___
แก้ไขและรันโค้ด