Je suis intéressé par la manière «correcte» d'écrire des fonctions avec des arguments optionnels dans R. Au fil du temps, je suis tombé sur quelques morceaux de code qui empruntent un chemin différent ici, et je n'ai pas trouvé de position (officielle) correcte sur ce sujet.
Jusqu'à présent, j'ai écrit des arguments optionnels comme celui-ci:
fooBar <- function(x,y=NULL){
if(!is.null(y)) x <- x+y
return(x)
}
fooBar(3) # 3
fooBar(3,1.5) # 4.5
La fonction renvoie simplement son argument si seulement x
est fourni. Il utilise une NULL
valeur par défaut pour le deuxième argument et si cet argument ne l'est pas NULL
, la fonction ajoute les deux nombres.
Alternativement, on pourrait écrire la fonction comme ceci (où le deuxième argument doit être spécifié par son nom, mais on pourrait aussi unlist(z)
ou définir à la z <- sum(...)
place):
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
Personnellement, je préfère la première version. Cependant, je peux voir le bien et le mal avec les deux. La première version est un peu moins sujette aux erreurs, mais la seconde pourrait être utilisée pour incorporer un nombre arbitraire d'options.
Existe-t-il une manière "correcte" de spécifier des arguments optionnels dans R? Jusqu'à présent, j'ai choisi la première approche, mais les deux peuvent parfois se sentir un peu "hacky".
xy.coords
voir une approche couramment utilisée.