ตอบ: วิธีใช้แพ็คเกจ microbenchmark เพื่อวัดเวลาดำเนินการ
คุณสามารถใช้แพ็คเกจ microbenchmark ใน R เพื่อเปรียบเทียบเวลาดำเนินการของนิพจน์ต่างๆ
คุณสามารถใช้ไวยากรณ์ต่อไปนี้เพื่อทำสิ่งนี้:
library (microbenchmark) #compare execution time of two different expressions microbenchmark( expression1, expression2) )
ตัวอย่างต่อไปนี้แสดงวิธีใช้ไวยากรณ์นี้ในทางปฏิบัติ
ตัวอย่าง: การใช้ microbenchmark() ใน R
สมมติว่าเรามีกรอบข้อมูลต่อไปนี้ใน R ซึ่งมีข้อมูลเกี่ยวกับคะแนนที่ทำได้โดยผู้เล่นในทีมบาสเก็ตบอลต่างๆ:
#make this example reproducible
set. seed ( 1 )
#create data frame
df <- data. frame (team=rep(c(' A ', ' B '), each= 500 ),
points=rnorm( 1000 , mean= 20 ))
#view data frame
head(df)
team points
1 A 19.37355
2 A 20.18364
3 A 19.16437
4 A 21.59528
5 A 20.32951
6 A 19.17953
ตอนนี้ สมมติว่าเราต้องการคำนวณคะแนนเฉลี่ยที่ผู้เล่นในแต่ละทีมทำได้โดยใช้สองวิธีที่แตกต่างกัน:
- วิธีที่ 1 : ใช้ Aggregate() จาก Base R
- วิธีที่ 2 : ใช้ group_by() และ summarise_at() จาก dplyr
เราสามารถใช้ฟังก์ชัน microbenchmark() เพื่อวัดเวลาที่ใช้ในการดำเนินการแต่ละนิพจน์เหล่านี้:
library (microbenchmark) library (dplyr) #time how long it takes to calculate mean value of points by team microbenchmark( aggregate(df$points, list(df$team), FUN=mean), df %>% group_by(team) %>% summarise_at(vars(points), list(name = mean)) ) Unit: milliseconds express aggregate(df$points, list(df$team), FUN = mean) df %>% group_by(team) %>% summarise_at(vars(points), list(name = mean)) min lq mean median uq max neval cld 1.307908 1.524078 1.852167 1.743568 2.093813 4.67408 100 a 6.788584 7.810932 9.946286 8.914692 10.239904 56.20928 100 b
ฟังก์ชัน microbenchmark() รันแต่ละนิพจน์ 100 ครั้งและวัดค่าเมตริกต่อไปนี้:
- min : เวลาขั้นต่ำที่จำเป็นสำหรับการดำเนินการ
- lq : ควอร์ไทล์ด้านล่าง (เปอร์เซ็นไทล์ที่ 25) ของเวลาที่ต้องใช้เพื่อทำให้เสร็จสมบูรณ์
- ค่าเฉลี่ย : เวลาเฉลี่ยที่จำเป็นสำหรับการดำเนินการ
- ค่ามัธยฐาน : เวลาดำเนินการค่ามัธยฐาน
- uq : ควอไทล์บน (เปอร์เซ็นไทล์ที่ 75) ของเวลาที่ต้องใช้ในการดำเนินการ
- max : เวลาสูงสุดที่จำเป็นสำหรับการดำเนินการ
- neval : จำนวนครั้งที่แต่ละนิพจน์ได้รับการประเมิน
โดยทั่วไป เราจะดูเฉพาะเวลาเฉลี่ยหรือค่ามัธยฐานที่ใช้ในการดำเนินการแต่ละนิพจน์เท่านั้น
จากผลลัพธ์เราจะเห็นได้ว่า:
- ใช้เวลาเฉลี่ย 1,852 มิลลิวินาที ในการคำนวณคะแนนเฉลี่ยของทีมโดยใช้วิธี R-based
- ใช้เวลาเฉลี่ย 9.946 มิลลิวินาที ในการคำนวณคะแนนเฉลี่ยต่อทีมโดยใช้วิธี dplyr
จากผลลัพธ์เหล่านี้ เราสรุปได้ว่าวิธีฐาน R เร็วกว่ามาก
นอกจากนี้เรายังสามารถใช้ฟังก์ชัน boxplot() เพื่อแสดงภาพการกระจายเวลาที่จำเป็นในการดำเนินการแต่ละนิพจน์:
library (microbenchmark) library (dplyr) #time how long it takes to calculate mean value of points by team results <- microbenchmark( aggregate(df$points, list(df$team), FUN=mean), df %>% group_by(team) %>% summarise_at(vars(points), list(name = mean)) ) #create boxplot to visualize results boxplot(results, names=c(' Base R ', ' dplyr '))
จากแผนภาพกล่อง เราจะเห็นว่าวิธี dplyr ใช้เวลาโดยเฉลี่ยนานกว่าในการคำนวณค่าคะแนนเฉลี่ยต่อทีม
หมายเหตุ : ในตัวอย่างนี้ เราใช้ฟังก์ชัน microbenchmark() เพื่อเปรียบเทียบเวลาดำเนินการของนิพจน์สองรายการที่แตกต่างกัน แต่คุณสามารถเปรียบเทียบนิพจน์ได้มากเท่าที่คุณต้องการในทางปฏิบัติ
แหล่งข้อมูลเพิ่มเติม
บทช่วยสอนต่อไปนี้จะอธิบายวิธีดำเนินการงานทั่วไปอื่นๆ ใน R:
วิธีล้างสภาพแวดล้อมใน R
วิธีล้างแปลงทั้งหมดใน RStudio
วิธีโหลดหลายแพ็คเกจใน R