2016-11-10 2 views
0

J'ai rencontré le problème varargs en R deux ou trois fois, mais il semble que le problème que j'ai est un peu plus compliqué que prévu. VoiciR fonction avec args variables en fonction de la présence/absence d'autres arguments

J'ai une fonction, qui fait quelque chose avec ses variables, mais je voudrais introduire une autre variable, sorte de drapeau, qui sélectionne le fonctionnement de la fonction et les paramètres requis par la fonction elle-même : à savoir le nombre et le type d'entrées dépend d'une entrée (drapeau).

Ok, un exemple est mieux:

example = function(x,flag=1,y){ 
    if (flag) return(x) 
    else return(y) 
} 

et cela fonctionne très bien. Le point est que dans cet exemple, vous devez spécifier à la fois x et y à chaque fois. Au lieu de cela je voudrais une fonction prenant seulement x si flag = 1 et seulement y si flag = 0. (Dans cet exemple stupide, ils seraient essentiellement deux fonctions distinctes, mais dans mon cas, j'ai d'autres arguments (communs) sur certains calculs que les deux parties des fonctions ont besoin). Je sais que l'on peut spécifier n'importe quelle valeur pour l'argument inutilisé et le résultat ne changera pas, mais je veux une fonction qui soit immédiatement lisible par l'utilisateur, et il est fastidieux de devoir spécifier un argument qui a gagné ' t être utilisé par la fonction

merci pour toute aide

+0

Je ne comprends pas votre problème. "Dans cet exemple, vous devez spécifier à la fois x et y à chaque fois" est tout simplement incorrect. Vous pouvez faire 'example (y = 2, flag = FALSE)'. – Roland

Répondre

0

Qu'en est-ce qui suit.

example = function(x,flag=1,y){ 
    if (flag && !missing(x)) return(x) 
    else if(!flag && !missing(y)) return(y) 
} 

Ceci va vérifier si le drapeau est 0 ou non nul plus il vérifiera si un argument est manquant. Vous voudrez peut-être gérer le cas où aucun de ces deux n'est vrai parce que cette fonction retournera NULL dans ce cas.

+0

oui, je sais l'utilisation de missing() et c'est en effet une solution..mais je n'aime pas le fait que juste en lisant la liste des arguments vous n'êtes pas en mesure de dire quels arguments sont nécessaires et qui ne sont pas – deltasun