6
votes

R - Détecter des expressions

Quel type d'objet est transmis à myfunc code> comme x? Il ne semble pas être une expression, ni une fonction et STR ne l'évalue tout simplement pas. Je comprends que je peux utiliser force () code> pour évaluer. Je me demande s'il y a un moyen de rassembler plus d'informations sur X sans l'évaluer.

myFunc = function( x )
{
    is.expression( x )    
    is.function( x )
    str( x )
}
myFunc( { x = 5; print( x + 1 ) } )

r

2 commentaires

ne semble pas le signaler comme une expression. ni type () ni mode ()


Je pense que vous pourriez être confus entre expressions (qui sont essentiellement des listes d'appel inévalué) et des résultats d'une expression. x dans votre fonction est 6.


3 Réponses :




6
votes

Vous pouvez utiliser match.Call pour extraire les arguments: xxx

probablement, j'ai besoin de dire que { est une fonction dans R, donc {...} n'est pas plus que appel .

mise à jour : pourquoi x < / code> n'est pas fonction pendant que { est fonction : xxx


2 commentaires

Merci de la mettre ensemble! Si {est une fonction, alors pourquoi est-ce que is.function (x) renvoie faux? Existe-t-il un moyen de changer l'environnement de x?


Parce que x est appel , pas fonction . appel est composé de fonction et arguments . Voir aussi la mise à jour.