我正在尝试将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不起作用?
答案 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