lapply และ anonymous functions
การเขียนฟังก์ชันเองแล้วนำไปใช้ใน lapply() ถือเป็นเรื่องที่น่าชื่นชม! แต่การนิยามฟังก์ชันเพื่อใช้เพียงครั้งเดียวนั้นดูจะสิ้นเปลืองเกินไปสักหน่อย ใช่ไหม? นั่นคือเหตุผลที่ R มีสิ่งที่เรียกว่า anonymous functions ให้ใช้งาน
ที่ผ่านมาได้เรียนรู้แล้วว่าฟังก์ชันใน R เป็น object ในตัวมันเอง นั่นหมายความว่าฟังก์ชันไม่จำเป็นต้องผูกกับชื่อโดยอัตโนมัติ เมื่อสร้างฟังก์ชัน จะใช้ assignment operator เพื่อตั้งชื่อให้ฟังก์ชันก็ได้ แต่ก็เป็นไปได้เช่นกันที่จะไม่ตั้งชื่อให้ฟังก์ชันนั้นเลย ซึ่งเรียกว่า anonymous function:
# Named function
triple <- function(x) { 3 * x }
# Anonymous function with same implementation
function(x) { 3 * x }
# Use anonymous function inside lapply()
lapply(list(1,2,3), function(x) { 3 * x })
split_low ถูกนิยามไว้ให้แล้ว
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
R ระดับกลาง
คำแนะนำการฝึกหัด
- แปลงการเรียก
lapply()ครั้งแรกให้ใช้ anonymous function ที่ทำงานเหมือนเดิม - ในทำนองเดียวกัน แปลงการเรียก
lapplyครั้งที่สองให้ใช้ anonymous function แทนฟังก์ชันselect_second() - ลบนิยามของทั้ง
select_first()และselect_second()ออก เนื่องจากไม่จำเป็นต้องใช้อีกต่อไปแล้ว
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
# split_low has been created for you
split_low
# Transform: use anonymous function inside lapply
select_first <- function(x) {
x[1]
}
names <- lapply(split_low, select_first)
# Transform: use anonymous function inside lapply
select_second <- function(x) {
x[2]
}
years <- lapply(split_low, select_second)