我喜欢用字符输入创建 dplyr 函数,所以会很高兴看到新的 v0.6.0 即将推出。
为了好玩和学习当前 dplyr 版本 0.5.0.9004,我尝试制作一个灵活的函数,它可以接受字符参数和表达式(NSE)。
我确实成功了,但这不能做得更优雅吗?!
d = data.frame(v1=1:2, v2=9:8)
fixquo <- function(x){
# 'fixquo' expects a enquo-ed object, then sees if enquo-ing needs to be 'reversed'...
if(!length(tryCatch({ls(get_env(x))}, error=function(e) "empty")))
x = as.name(as.character(UQ(x))[2])
x
}
Dtest <- function(d, x="v1", res="z"){
x <- enquo(x) %>% fixquo()
d %>% mutate(!!res := UQ(x))
}
Dtest(d)
Dtest(d, "v1")
Dtest(d, v1)
Dtest(d, v2)