lapply() กับ Data Frame
ถ้ามี data frame ของผลตอบแทนหุ้นแทนที่จะเป็น list จะใช้ lapply() ได้อยู่ไหม? ได้เลย! อาจฟังดูน่าแปลกใจ แต่ที่จริงแล้ว data frame คือ list ประเภทหนึ่ง และการเรียก lapply() จะนำฟังก์ชันไปใช้กับแต่ละ คอลัมน์ ของ data frame
df
a b
1 1 4
2 2 6
class(df)
[1] "data.frame"
lapply(df, FUN = sum)
$a
[1] 3
$b
[1] 10
lapply() รวมค่าในแต่ละคอลัมน์ของ data frame แต่ยังคงคืนผลลัพธ์เป็น list ตามปกติ มีการเตรียม data frame ของผลตอบแทนรายวัน ในรูปทศนิยม ชื่อ stock_return ไว้ให้แล้ว
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
R ระดับกลางสำหรับการเงิน
คำแนะนำการฝึกหัด
- พิมพ์
stock_returnเพื่อดูข้อมูลใน data frame - ใช้
lapply()เพื่อคำนวณค่าเฉลี่ย (mean) ของแต่ละคอลัมน์ - สร้างฟังก์ชันสำหรับคำนวณ Sharpe Ratio โดยให้นำค่าเฉลี่ยของผลตอบแทนมาลบด้วยอัตราผลตอบแทนที่ไม่มีความเสี่ยง (
.03%) แล้วหารด้วยส่วนเบี่ยงเบนมาตรฐานของผลตอบแทน - ใช้
lapply()เพื่อคำนวณ Sharpe Ratio ของแต่ละคอลัมน์
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
# Print stock_return
___
# lapply to get the average returns
___
# Sharpe ratio
sharpe <- function(returns) {
(___ - .0003) / ___
}
# lapply to get the sharpe ratio
___