Я хочу написать функцию в R, которая захватывает имя переменной из контекста вызывающего абонента. Я думаю, что проблема, которую я имею, лучше понять, спросив, как составить deparse
и substitute
. Вы можете видеть, что наивная композиция не работает:В R, как определить функцию, эквивалентную `deparse (substitute (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
Я также попробовал несколько вариаций, связанных с eval.parent
, но не повезло. Любая помощь приветствуется.
Разъяснение: Я не ищу синоним deparse(substitute(...))
, например, match.call()[[2]]
- то, что я ищу способ определить функцию
desub = function(foo) {
...
# What goes here?
}
таким образом, что определение f
выше дает тот же ответ, как g
. Он должен выглядеть следующим образом:
> f=function(foo) { message(desub(foo)) }
> f(log)
log
Возможно match.call
может быть полезным в теле desub
выше, но я хотел бы знать, каким образом. Благодаря!
Вы можете проверить 'match.call' – akrun
@akrun: Я знаю о' match.call', но я не вижу, как это поможет. Вы хотите немного разобраться? Или, может быть, вам будет проще всего предоставить строку кода, которая делает то, о чем я прошу ... – Metamorphic
Я имел в виду соответствие 'g1 <- function (foo).называть() [[2]]; g1 (log) # log' – akrun