2011-12-20 5 views
14

J'ai une fonctiondouble emploi Éviter l'argument passé à travers (...)

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

Maintenant, je voudrais donner quelques valeurs par défaut pour complot dans le cas où l'utilisateur n'a pas spécifié ces arguments. (c'est-à-dire xlab="").

Comment puis-je fournir un ensemble d'options de tracé par défaut tout en permettant à l'utilisateur de remplacer ces arguments? Puisque si le même argument est entré deux fois, R lancera l'erreur: argument formel correspondant à plusieurs arguments réels.

Je sais que je peux transmettre toutes ces options par ma fonction

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

mais je préfère ne pas le faire.

Existe-t-il une solution simple et facile pour y parvenir?

+0

Quelle est votre objection à 'somefun <- function (someparamenters, principale, xlab = "", ...) {intrigue (genre de choses, xlab, ...)} ''? J'aurais pensé que c'est exactement ce que tu veux. – Henry

+0

Ce n'est pas propre. semble inutile, et les paramètres apparaîtront dans la documentation quand je mets ce code dans un paquet – LostLin

+1

Je soumets que vos utilisateurs voudront ces paramètres dans la documentation, et donc la suggestion de Henry est préférée. – Aaron

Répondre

19

Try modifyList utilisé comme suit:

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

merci pour votre réponse. Cependant, comment puis-je obtenir la liste pour agir en tant que paramètre maintenant? c'est à dire 'plot (1,2, args)' ne fonctionnera certainement pas dans ce cas – LostLin

+1

@Ellipsis C'est la magie de 'do.call': elle prend les arguments sous forme de liste. Voir aussi '? Do.call'. +1 pour 'modifyList', ne le connaissait pas. J'aurais travaillé avec le résultat 'match.call()', qui est loin d'être aussi soigné que ça. –

+1

@Ellipsis, je l'ai modifié pour donner un exemple 'plot'. –

Questions connexes