参数中的参数用于延迟评估

时间:2016-03-23 15:06:05

标签: r lazy-evaluation

我正在尝试将varable表达式传递给lazyeval函数:

test <- function(expr){
  tmp <- iris[eval(substitute(expr), iris), ]
  #actually do and return complicated stuff with tmp
  return(data.frame(n = nrow(tmp), sepal.length = mean(tmp$Sepal.Length)))
}

test.species <- function(species){
  return(test(Species == substitute(species)))
}

#usage:
test.species("virginica")

功能测试工作正常。但是为什么test.species不起作用?

1 个答案:

答案 0 :(得分:1)

substitute(Species == substitute(species))test内进行评估,这意味着Species不会与字符值进行比较,而是与符号(substitute(species))进行比较。

bquote可以在这里使用:

test.species <- function(species){
  eval(bquote(test(Species == .(species))))
}
test.species("virginica")
#   n sepal.length
#1 50        6.588