使用函数内变量计算评估表达式
Evaluate expression with in-function variable calculation
基本上,我想创建一个 add_trend
函数来绑定到原始数据集。但是,我想用一个表达式来做到这一点。例如 .t
= 线性趋势,.t + .t^2
= 二次趋势。
.data <- tibble::tibble(
x = rnorm(100),
y = rnorm(100))
add_trend <- function(.data, .f = NULL) {
.t <- 1:NROW(.data)
.expr <- quote(.f)
eval(.expr)
}
add_trend(.data, .t^2)
#> Error in eval(.expr): object '.t' not found
由 reprex package (v0.2.1)
于 2019-03-07 创建
它必须与它被评估的环境做一些事情。如果我将 .t
存储在 Global_Env
中,那么该函数就可以工作,但是当它在函数内部完成时,就会出现上述错误。任何帮助将不胜感激。
使用 substitute
而不是 quote
:
add_trend <- function(.data, .f = NULL) {
.t <- 1:NROW(.data)
.expr <- substitute(.f)
eval(.expr)
}
来自help("quote")
substitute
returns the parse tree for the (unevaluated) expression
expr
, substituting any variables bound in env.
quote
simply returns its argument. The argument is not evaluated and
can be any R expression.
基本上,我想创建一个 add_trend
函数来绑定到原始数据集。但是,我想用一个表达式来做到这一点。例如 .t
= 线性趋势,.t + .t^2
= 二次趋势。
.data <- tibble::tibble(
x = rnorm(100),
y = rnorm(100))
add_trend <- function(.data, .f = NULL) {
.t <- 1:NROW(.data)
.expr <- quote(.f)
eval(.expr)
}
add_trend(.data, .t^2)
#> Error in eval(.expr): object '.t' not found
由 reprex package (v0.2.1)
于 2019-03-07 创建它必须与它被评估的环境做一些事情。如果我将 .t
存储在 Global_Env
中,那么该函数就可以工作,但是当它在函数内部完成时,就会出现上述错误。任何帮助将不胜感激。
使用 substitute
而不是 quote
:
add_trend <- function(.data, .f = NULL) {
.t <- 1:NROW(.data)
.expr <- substitute(.f)
eval(.expr)
}
来自help("quote")
substitute
returns the parse tree for the (unevaluated) expressionexpr
, substituting any variables bound in env.
quote
simply returns its argument. The argument is not evaluated and can be any R expression.