Tôi quan tâm đến cách viết "hàm" chính xác với các đối số tùy chọn trong R. Theo thời gian, tôi tình cờ thấy một vài đoạn mã đi theo một tuyến đường khác ở đây và tôi không thể tìm thấy một vị trí (chính thức) thích hợp về chủ đề này.
Cho đến bây giờ, tôi đã viết các đối số tùy chọn như thế này:
fooBar <- function(x,y=NULL){
if(!is.null(y)) x <- x+y
return(x)
}
fooBar(3) # 3
fooBar(3,1.5) # 4.5
Hàm chỉ đơn giản trả về đối số của nó nếu chỉ x
được cung cấp. Nó sử dụng một NULL
giá trị mặc định cho đối số thứ hai và nếu đối số đó xảy ra là không NULL
, thì hàm sẽ thêm hai số.
Ngoài ra, người ta có thể viết hàm như thế này (trong đó đối số thứ hai cần được chỉ định theo tên, nhưng người ta cũng có thể unlist(z)
hoặc định nghĩa z <- sum(...)
thay thế):
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
Cá nhân tôi thích phiên bản đầu tiên. Tuy nhiên, tôi có thể thấy tốt và xấu với cả hai. Phiên bản đầu tiên ít bị lỗi hơn, nhưng phiên bản thứ hai có thể được sử dụng để kết hợp một số tùy chọn tùy ý.
Có cách "chính xác" nào để chỉ định các đối số tùy chọn trong R không? Cho đến nay, tôi đã giải quyết theo cách tiếp cận đầu tiên, nhưng cả hai đôi khi có thể cảm thấy một chút "hacky".
xy.coords
để xem cách tiếp cận thường được sử dụng.