Я хочу построитьЭлегантный способ определить функцию внутри другой функции
f <- function(...) {
g <- function(x) x^2
list(...)
}
так, что я могу вызвать с помощью f(g(4))
и имеют list(...)
результат в list(16)
.
В общем, я определю несколько временных функций внутри f
, которые пользователь может вызвать при вызове f(...)
.
Я экспериментировал с assign
и newenvironment
, но только что стал более смущенным. Приветствуется помощь с элегантным решением.
Причина в том, что я хочу, чтобы функция в пакете Hmisc
, drawPlot
, позволяла пользователям указывать универсально названные функции в качестве входных данных для создания серии графических элементов, и я не хочу зарезервируйте эти имена общего типа. Например:
d <- drawPlot(Curve(), Points()) # interactively make a curve and
# a set of points
@TheTime Не должен быть 'list (eval (substitute (...)))'? – cryo111
@TheTime Это может быть удобно для передачи аргументов, похожих на 'formula'. data.table имеет такую псевдофункцию в 'melt.data.table' (называемой' pattern'); это даже не настоящая функция, просто ярлык для разбора аргументов (я думаю). – Frank
'dplyr :: select' имеет аналогичную функциональность, приведенную в действие пакетом' lazyeval'. Вы можете получить вдохновение из [исходного кода] (https://github.com/hadley/dplyr/blob/master/R/select-vars.R) – shadowtalker