2011-02-22 10 views
9

¿Es posible tener múltiples argumentos de puntos suspensivos en una función R? Una versión simplificada de lo que estoy tratando de hacer es lo siguiente:Usar argumentos de elipses múltiples en R

plotgenerator<-function(x,y,...,...,...){ 
    plot(x,y,...) 
    axes(...) 
    legend(...) 
    } 

Mi idea era utilizar argumentos de cadena opcionales, como esto:

plotgenerator<-function(x,y,plotargs="",axesargs="",legendargs=""){ 
    plot(x,y,plotargs) 
    axes(axesargs) 
    legend(legendargs) 
    } 

Pero eso no funciona. ¿Alguien sabe si algo como esto es posible? He buscado mucho para esto, pero una cadena de búsqueda como "R ..." no es realmente muy útil;)

Respuesta

10

Puede usar algo similar a su segunda opción si usa do.call, lo que le permite pasar los argumentos a una función como una lista. P.ej. pase axesarg como una lista y luego en su función tenga: do.call(axes,axesarg) etc.

+0

Perfecto, muchas gracias. do.call es precisamente lo que estaba buscando. Realmente lo aprecio. – registrar

+1

Un ejemplo de la solución sería útil – geotheory

3

La primera manera que muestra no es compatible porque no hay forma de que el analizador sepa a qué conjunto de puntos desea que ingrese el argumento.

Puede capturar los puntos en una lista y trabajar desde allí con algo como:

mydots <- list(...) 

A continuación, puede hacer copias, eliminar elementos que no son apropiados para la función que está llamando, a continuación, utilizar hacer .call (como se ha mencionado) para llamar a su función.

El segundo enfoque puede ser más claro si cree que la persona que llama puede enviar diferentes valores a diferentes funciones que tienen el mismo nombre de argumento. Nuevamente use do.call para pasar la lista de argumentos.

Cuestiones relacionadas