我正在研究一个将字符串作为函数参数的R包。现在我想使用非标准评估来允许非字符串输入。另外,为了保持向后兼容性,我想保留函数接受字符串的可能性。如何编写也需要字符输入的NES函数?
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'用于字符大小写'la'data.table'的方式。 – agstudy