通过函数内变量计算评估表达式

时间:2019-03-07 02:14:28

标签: r eval environment rlang

基本上,我想创建一个绑定到原始数​​据集的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中,则该函数可以工作,但是在函数内部完成后,会出现上述错误。任何帮助将不胜感激。

1 个答案:

答案 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表达式。