Interesuje mnie jaki jest „poprawny” sposób pisania funkcji z opcjonalnymi argumentami w R. Z biegiem czasu natknąłem się na kilka fragmentów kodu, które obierają tutaj inną drogę i nie mogłem znaleźć właściwej (oficjalnej) pozycji w tym temacie.
Do tej pory pisałem opcjonalne argumenty, takie jak:
fooBar <- function(x,y=NULL){
if(!is.null(y)) x <- x+y
return(x)
}
fooBar(3) # 3
fooBar(3,1.5) # 4.5
Funkcja po prostu zwraca swój argument, jeśli tylko x
zostanie podany. Używa domyślnej NULL
wartości dla drugiego argumentu, a jeśli ten argument nie jest NULL
, funkcja dodaje dwie liczby.
Alternatywnie, można by napisać funkcję w ten sposób (gdzie drugi argument musi być określony przez nazwę, ale można też zamiast tego unlist(z)
zdefiniować 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
Osobiście wolę pierwszą wersję. Jednak w obu przypadkach widzę dobre i złe strony. Pierwsza wersja jest trochę mniej podatna na błędy, ale druga może być użyta do włączenia dowolnej liczby opcji.
Czy istnieje „poprawny” sposób określenia opcjonalnych argumentów w języku R? Jak dotąd zdecydowałem się na pierwsze podejście, ale oba mogą czasami wydawać się nieco „zepsute”.
xy.coords
aby zobaczyć powszechnie stosowane podejście.