【发布时间】:2015-10-19 12:22:17
【问题描述】:
我正在开发一个将字符串作为函数参数的 R 包。现在我想使用非标准评估来允许非字符串输入。另外,为了保持向后兼容性,我想保留函数接受字符串的可能性。
Hadley 给出了一个带有子集函数的example,并建议每个 NES 函数都应该伴随一个标准的评估函数。
library(lazyeval)
# standard evaluation
subset2_ <- function(df, condition) {
r <- lazy_eval(condition, df)
r <- r & !is.na(r)
df[r, , drop = FALSE]
}
subset2_(mtcars, lazy(mpg > 31))
# NES can be written easily afterwards
subset2 <- function(df, condition) {
subset2_(df, lazy(condition))
}
虽然 SE 函数现在也接受带引号的输入,
subset2_(mtcars, "mpg > 31")
NSE 函数抛出错误:
subset2(mtcars, "mpg > 31")
但我希望用户对带引号和不带引号的参数都有相同的函数(NSE 函数)。
有什么想法吗?
【问题讨论】:
-
我会添加另一个参数来区分这两种情况。即
with=FALSE用于字符大小写 à ladata.table方式。
标签: r eval lazy-evaluation