Je veux écrire une fonction dans R qui saisit le nom d'une variable dans le contexte de l'appelant de l'appelant. Je pense que le problème que j'ai est mieux compris en demandant comment composer deparse
et substitute
. Vous pouvez voir qu'une composition naïve ne fonctionne pas:En R, comment définir une fonction équivalente à `deparse (substitut (x))`?
# a compose operator
> `%c%` = function(x,y)function(...)x(y(...))
# a naive attempt to combine deparse and substitute
> desub = deparse %c% substitute
> f=function(foo) { message(desub(foo)) }
> f(log)
foo
# this is how it is supposed to work
> g=function(foo) { message(deparse(substitute(foo))) }
> g(log)
log
J'ai aussi essayé quelques variations impliquant eval.parent
mais pas de chance. Toute aide est appréciée.
Précision: Je ne cherche pas synonyme de deparse(substitute(...))
, par exemple match.call()[[2]]
- ce que je suis à la recherche est un moyen de définir une fonction
desub = function(foo) {
...
# What goes here?
}
telle que la définition de f
ci-dessus produit la même réponse que g
. Il devrait ressembler à ceci:
> f=function(foo) { message(desub(foo)) }
> f(log)
log
Peut-être match.call
pourrait être utile dans le corps de desub
ci-dessus, mais je voudrais savoir comment. Merci!
Vous pouvez vérifier 'match.call' – akrun
@akrun: Je sais' match.call' mais je ne vois pas comment il va aider. Voulez-vous élaborer un peu? Ou peut-être que ce sera plus facile pour vous de fournir simplement une ligne de code qui fait ce que je demande ... – Metamorphic
Je voulais dire 'g1 <- function (foo) match.appel() [[2]]; g1 (log) # log' – akrun