Estou interessado em qual é a maneira "correta" de escrever funções com argumentos opcionais em R. Com o tempo, deparei-me com alguns trechos de código que seguem uma rota diferente aqui e não consegui encontrar uma posição (oficial) adequada neste tópico.
Até agora, escrevi argumentos opcionais como este:
fooBar <- function(x,y=NULL){
if(!is.null(y)) x <- x+y
return(x)
}
fooBar(3) # 3
fooBar(3,1.5) # 4.5
A função simplesmente retorna seu argumento se apenas x
for fornecida. Ele usa um NULL
valor padrão para o segundo argumento e, se esse argumento não for NULL
, a função adicionará os dois números.
Como alternativa, pode-se escrever a função dessa maneira (onde o segundo argumento precisa ser especificado pelo nome, mas também pode-se unlist(z)
ou definir 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
Pessoalmente, prefiro a primeira versão. No entanto, posso ver o bem e o mal com ambos. A primeira versão é um pouco menos propensa a erros, mas a segunda poderia ser usada para incorporar um número arbitrário de opcionais.
Existe uma maneira "correta" de especificar argumentos opcionais no R? Até agora, decidi pela primeira abordagem, mas ambas podem ocasionalmente parecer um pouco "hacky".
xy.coords
ver uma abordagem comumente usada.