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 ) } )
3 Réponses :
Je pense que classe code> ferait le tour ... voir docs . p>
Hmmm, classe code> renvoie numérique code> qui me fait penser qu'il évalue réellement l'expression avant de le tester ...
En fait, même si vous essayez d'attribuer cette expression à une variable, l'expression est exécutée immédiatement et vous vous retrouvez avec une variable numérique contenant 6 ...
Exactement. L'évaluation est effectuée immédiatement, avant l'attribution ou la transmission du résultat à une fonction.
Dason vient de poster une réponse similaire à celle-ci sur Talkstats.com pour déterminer si un objet est un cadre de données ou une liste ( Cliquez ici pour un lien à ce poste) a>. Je viens de l'étendre à une expression que je pense convient à vos besoins.
j ({x = 5; impression (x + 1)}) jette une erreur "Aucune méthode applicable pour" J "appliquée à l'objet de la classe" C ("double", "numérique") "mais la solution semblait intelligente =)
Il ne s'agissait pas nécessairement de déterminer si quelque chose était un cadre de données ou une liste - il s'agissait d'adapter l'appel de la fonction pour savoir si l'argument était une trame de données ou une liste étant donné que l'affiche souhaitait pouvoir proposer des fonctionnalités similaires pour les deux cas, mais Voulant que la fonction indique si l'objet étant passé était une liste ou une trame de données. Mais merci pour le shoutout.
Vous pouvez utiliser probablement, j'ai besoin de dire que mise à jour em>: pourquoi match.Call code> pour extraire les arguments: { code> est une fonction dans R, donc {...} code> n'est pas plus que appel code>. P> x < / code> n'est pas fonction code> pendant que { code> est fonction code>: p>
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 code>, pas fonction code>. appel code> est composé de fonction code> et arguments code>. Voir aussi la mise à jour.
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 code> dans votre fonction est 6.