Обратите внимание, что если вы замените cumsum на cumprod
, то на выходе будет вектор 4, а не 24, поэтому мы предполагаем, что вы намеревались заменить его на prod
.
Мы используем substitute
для замены cumsum
значением аргумента cumsum
, а затем вычисляем полученное выражение.
f
здесь не использует пакетов - входные данные вв вопросе используется expr
от rlang, но даже в этом нет необходимости, поскольку мы могли бы использовать quote(...)
вместо expr(...)
.
f <- function(.x, cumsum) eval.parent(do.call("substitute", list(.x)))
# test
f(expr(cumsum(1:4)), prod)
## [1] 24
f(expr(cumsum(1:4)), cumprod)
## [1] 1 2 6 24