基本上,我想创建一个绑定到原始数据集的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
中,则该函数可以工作,但是在函数内部完成后,会出现上述错误。任何帮助将不胜感激。
答案 0 :(得分:1)
使用substitute
而不是quote
:
add_trend <- function(.data, .f = NULL) {
.t <- 1:NROW(.data)
.expr <- substitute(.f)
eval(.expr)
}
来自help("quote")
substitute
返回(未求值)表达式的分析树expr
,替换为env中绑定的所有变量。
quote
仅返回其参数。该参数未评估,并且 可以是任何R表达式。