2017-09-16 3 views
2

Est-il possible de définir un attribut de fonction dans la fonction même?
Il peut être défini à l'extérieur, mais existe-t-il une notation pour l'auto-référence dans une fonction?R définir un attribut de fonction à l'intérieur de la fonction

f2 = function(x) { 
    x/2 
    attr(thisObject(),'type')='half' #something like thisObject() 
} 

Il est facile de le faire en dehors de la fonction:

attr(f2,'type')='half' 

Dans une situation, je dois savoir quel type de fonction est passé par:

fCalc=function(f=f2,x){ 
    if(attr(f,'type')=='half') { 
    cat('ok\n') 
    return(f(x)) 
    } else cat('not ok') 
} 
fCalc(f2,4) 
ok 
[1] 2 
+1

Je serais intéressé de connaître le cas d'utilisation pour cela. –

+0

Votre situation n'explique pas pourquoi vous devez définir l'attribut dans la fonction, par opposition à l'extérieur de la fonction. –

+0

Chaque fois que je modifie la fonction, je dois me rappeler de redéfinir l'attribut. Parfois j'oublie ... – xm1

Répondre

2

Si vous voulez Pour écrire des programmes Java dans R, vous pouvez définir une fabrique de fonctions:

fact <- function(args, expr, attrib) 
{ 
    f <- function() { } 
    formals(f) <- args 
    body(f) <- substitute(expr) 
    attr(f, "type") <- attrib 
    f 
} 

fact(alist(x=), x/2, "foo")