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

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)
แก้ไขและรันโค้ด