ฉันสนใจในสิ่งที่เป็น "วิธีที่ถูกต้อง" ในการเขียนฟังก์ชันด้วยอาร์กิวเมนต์ที่เป็นตัวเลือกใน R เมื่อเวลาผ่านไปฉันสะดุดโค้ดสองสามชิ้นที่ใช้เส้นทางอื่นที่นี่และฉันไม่สามารถหาตำแหน่งที่เหมาะสม (เป็นทางการ) ในหัวข้อนี้
จนถึงตอนนี้ฉันได้เขียนข้อโต้แย้งเพิ่มเติมดังนี้:
fooBar <- function(x,y=NULL){
if(!is.null(y)) x <- x+y
return(x)
}
fooBar(3) # 3
fooBar(3,1.5) # 4.5
ฟังก์ชั่นเพียงแค่ส่งกลับข้อโต้แย้งของมันถ้าx
มีให้เท่านั้น มันใช้ค่าเริ่มต้นNULL
สำหรับอาร์กิวเมนต์ที่สองและหากอาร์กิวเมนต์นั้นไม่เป็นNULL
เช่นนั้นฟังก์ชันจะเพิ่มตัวเลขสองตัว
อีกทางเลือกหนึ่งสามารถเขียนฟังก์ชั่นเช่นนี้ (โดยที่อาร์กิวเมนต์ที่สองจำเป็นต้องระบุด้วยชื่อ แต่สามารถunlist(z)
ระบุหรือกำหนดz <- sum(...)
แทนได้):
fooBar <- function(x,...){
z <- list(...)
if(!is.null(z$y)) x <- x+z$y
return(x)
}
fooBar(3) # 3
fooBar(3,y=1.5) # 4.5
ส่วนตัวแล้วฉันชอบเวอร์ชั่นแรกมากกว่า อย่างไรก็ตามฉันเห็นทั้งดีและไม่ดีได้ทั้งคู่ เวอร์ชันแรกมีแนวโน้มที่จะเกิดข้อผิดพลาดน้อยกว่าเล็กน้อย แต่เวอร์ชันที่สองสามารถใช้เพื่อรวมจำนวนตัวเลือกโดยพลการ
มีวิธี "ถูกต้อง" เพื่อระบุอาร์กิวเมนต์ตัวเลือกใน R? จนถึงตอนนี้ฉันได้ตัดสินในแนวทางแรก แต่ทั้งคู่อาจรู้สึก "แฮ็ค" เล็กน้อย
xy.coords
เพื่อดูวิธีการที่ใช้กันทั่วไป