Ich interessiere mich für die "richtige" Möglichkeit, Funktionen mit optionalen Argumenten in R zu schreiben. Im Laufe der Zeit bin ich auf ein paar Codeelemente gestoßen, die etwas anderes nehmen Route hier, und ich konnte keine richtige (offizielle) Position zu diesem Thema finden."Korrekte" Möglichkeit, optionale Argumente in R-Funktionen anzugeben
Bisher habe ich optionale Argumente wie folgt 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, wenn nur x
geliefert wird. Es verwendet einen Standardwert NULL
für das zweite Argument, und wenn dieses Argument nicht NULL
ist, fügt die Funktion die zwei Zahlen hinzu.
Alternativ könnte man die Funktion wie folgt schreiben (wobei das zweite Argument von Name angegeben werden muss, aber man könnte auch unlist(z)
oder definieren z <- sum(...)
statt):
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. Aber ich kann mit beiden gut und schlecht sehen. Die erste Version ist ein wenig weniger anfällig für Fehler, aber die zweite könnte verwendet werden, um eine beliebige Anzahl von Optionalen einzubauen.
Gibt es eine "richtige" Möglichkeit, optionale Argumente in R anzugeben? Bis jetzt habe ich mich auf den ersten Ansatz festgelegt, aber beide können sich manchmal ein bisschen "hacky" fühlen.
prüfen, den Quellcode aus 'xy.coords' eine häufig zu sehen benutzter Ansatz. –
Der Quellcode für 'xy.coords', der von [Carl Witthoft] (http://stackoverflow.com/users/884372/carl-witthoft) genannt wird, finden Sie unter [xy.coords] (https: // github. com/wch/r-source/blob/af7f52f70101960861e5d995d3a4bec010bc89e6/src/library/grDevices/R/xyz.coords.R # L21-L126) – ecerulm