Modo “corretto” per specificare argomenti opzionali nelle funzioni R

Mi interessa sapere quale sia il modo “corretto” per scrivere le funzioni con argomenti opzionali in R. Nel corso del tempo, mi sono imbattuto in alcune parti di codice che seguono un percorso diverso qui, e non sono riuscito a trovare una posizione corretta (ufficiale) su questo argomento.

Fino ad ora, ho scritto argomenti opzionali come questo:

fooBar <- function(x,y=NULL){ if(!is.null(y)) x <- x+y return(x) } fooBar(3) # 3 fooBar(3,1.5) # 4.5 

La funzione restituisce semplicemente il suo argomento se solo x è fornito. Utilizza un valore NULL predefinito per il secondo argomento e se questo argomento non è NULL , la funzione aggiunge i due numeri.

In alternativa, si potrebbe scrivere la funzione in questo modo (dove il secondo argomento deve essere specificato per nome, ma si potrebbe anche non unlist(z) o definire 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 

Personalmente preferisco la prima versione. Tuttavia, posso vedere bene e male con entrambi. La prima versione è un po ‘meno incline all’errore, ma la seconda potrebbe essere utilizzata per incorporare un numero arbitrario di optionals.

Esiste un modo “corretto” per specificare argomenti opzionali in R? Finora, ho optato per il primo approccio, ma entrambi possono occasionalmente sentirsi un po ‘”hacky”.