Saya tertarik pada apa cara "benar" untuk menulis fungsi dengan argumen opsional di R. Seiring waktu, saya menemukan beberapa potong kode yang mengambil rute berbeda di sini, dan saya tidak dapat menemukan posisi yang tepat (resmi). pada topik ini.
Sampai sekarang, saya telah menulis argumen opsional seperti ini:
fooBar <- function(x,y=NULL){
if(!is.null(y)) x <- x+y
return(x)
}
fooBar(3) # 3
fooBar(3,1.5) # 4.5
Fungsi hanya mengembalikan argumennya jika hanya xdisediakan. Itu menggunakan NULLnilai default untuk argumen kedua dan jika argumen itu kebetulan tidak NULL, maka fungsi menambahkan dua angka.
Atau, seseorang dapat menulis fungsi seperti ini (di mana argumen kedua perlu ditentukan dengan nama, tetapi orang juga dapat unlist(z)atau mendefinisikan 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
Secara pribadi saya lebih suka versi pertama. Namun, saya bisa melihat baik dan buruk dengan keduanya. Versi pertama agak kurang rentan terhadap kesalahan, tetapi yang kedua dapat digunakan untuk memasukkan jumlah opsional yang sewenang-wenang.
Apakah ada cara "benar" untuk menentukan argumen opsional di R? Sejauh ini, saya sudah sepakat dengan pendekatan pertama, tetapi keduanya kadang-kadang bisa terasa sedikit "hacky".
xy.coordsmelihat pendekatan yang umum digunakan.