2011-12-20 14 views
14

que tiene una funciónEvitar el argumento pasado a través de la duplicación (...)

somefun <- function(someparameters , ...) { plot(stuff, ...)} 

Ahora me gustaría ofrecer algunos valores predeterminados para la trama en el caso de que el usuario no ha especificado los argumentos. (es decir, xlab="").

¿Cómo proporciono un conjunto de opciones de trazado predeterminadas pero aún le permite al usuario anular esos argumentos? Dado que si el mismo argumento se ingresa dos veces, R arrojará el error: argumento formal que coincide con múltiples argumentos reales.

Soy consciente de que me puede pasar en todas estas opciones a través de mi función

somefun <- function(someparameters, main, xlab, ylab, xlim....) 

pero yo preferiría no hacerlo.

¿Existe alguna solución fácil y sencilla para lograr esto?

+0

¿Cuál es su objeción a 'somefun <- function (someparamenters, principal, xlab = "", ...) {parcela (cosas, xlab, ...)} ''? Pensé que eso es exactamente lo que quieres. – Henry

+0

No es limpio. parece innecesario, y los parámetros aparecerán en la documentación cuando coloque este código en un paquete – LostLin

+1

Presento que sus usuarios querrán estos parámetros en la documentación, por lo que se prefiere la sugerencia de Henry. – Aaron

Respuesta

19

Trate modifyList utilizado de la siguiente manera:

f <- function(x, ...) { 
    defaults <- list(xlab = "x", ylab = "y") 
    args <- modifyList(defaults, list(x = x, ...)) 
    do.call("plot", args) 
} 
+0

gracias por su respuesta. sin embargo, ¿cómo consigo que la lista actúe como un parámetro ahora? es decir 'plot (1,2, args)' definitivamente no funcionará en este caso – LostLin

+1

@Ellipsis Esa es la magia de 'do.call': toma los argumentos como una lista. Ver también '? Do.call'. +1 para 'modifyList', no lo conocía. Hubiera trabajado con el resultado 'match.call()', que está lejos de ser tan claro como este. –

+1

@Ellipsis, lo he modificado para dar un ejemplo de 'diagrama '. –

Cuestiones relacionadas