Ich interessiere mich für die "richtige" Art, Funktionen mit optionalen Argumenten in R zu schreiben. Im Laufe der Zeit bin ich auf einige Codeteile gestoßen, die hier einen anderen Weg einschlagen, und ich konnte keine richtige (offizielle) Position finden Zu diesem Thema.
Bis jetzt habe ich optionale Argumente wie diese geschrieben:
fooBar <- function(x,y=NULL){
if(!is.null(y)) x <- x+y
return(x)
}
fooBar(3) # 3
fooBar(3,1.5) # 4.5
Die Funktion gibt einfach ihr Argument zurück, wenn nur angegeben x
wird. NULL
Für das zweite Argument wird ein Standardwert verwendet. Wenn dies nicht der Fall ist NULL
, fügt die Funktion die beiden Zahlen hinzu.
Alternativ könnte man die Funktion so schreiben (wobei das zweite Argument durch den Namen angegeben werden muss, aber man könnte auch unlist(z)
oder z <- sum(...)
stattdessen definieren ):
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
Persönlich bevorzuge ich die erste Version. Ich kann jedoch mit beiden gut und schlecht sehen. Die erste Version ist etwas weniger fehleranfällig, aber die zweite könnte verwendet werden, um eine beliebige Anzahl von Optionen aufzunehmen.
Gibt es eine "richtige" Möglichkeit, optionale Argumente in R anzugeben? Bisher habe ich mich für den ersten Ansatz entschieden, aber beide können sich gelegentlich etwas "hackig" fühlen.
xy.coords
auf einen häufig verwendeten Ansatz.xy.coords
von Carl Witthoft l erwähnte Quellcode ist unter xy.coordsAntworten:
Sie können auch
missing()
testen, ob das Argument angegebeny
wurde oder nicht :quelle
missing()
ist auch in dem Sinne ausdrucksvoller, dass es "sagt, was es bedeutet". Außerdem können Benutzer an Stellen, an denen dies sinnvoll ist, den Wert NULL übergeben!@param x numeric; something something; @param y numeric; **optional** something something; @param z logical; **optional** something something
missing()
ist schrecklich, wenn Sie Argumente von einer Funktion an eine andere übergeben möchten.