R-通过功能变量计算评估表达



基本上,我想创建一个将绑定到原始数据集的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软件包(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返回(未评估)表达式的解析树 expr,替换在env。

中绑定的任何变量

quote只是返回其参数。该论点尚未评估,并且 可以是任何r表达式。

最新更新