相关疑难解决方法(0)

用dplyr和lazyeval编程

我有问题以保留非标准评估的方式重构dplyr.让我们说我想创建一个总是选择和重命名的函数.

library(lazyeval)
library(dplyr)

df <- data.frame(a = c(1,2,3), f = c(4,5,6), lm = c(7, 8 , 9))

select_happy<- function(df, col){
    col <- lazy(col)
    fo <- interp(~x, x=col)
    select_(df, happy=fo)
}

f <- function(){
    print('foo')
}
Run Code Online (Sandbox Code Playgroud)

select_happy()当库函数使用非标准求值时,根据此帖子Refactor R代码的答案编写.select_happy()适用于未定义或在全局环境中定义的列名.但是,当列名也是另一个名称空间中的函数名称时,它会遇到问题.

select_happy(df, a)
#   happy
# 1     1
# 2     2
# 3     3

select_happy(df, f)
#   happy
# 1     4
# 2     5
# 3     6

select_happy(df, lm)
# Error in eval(expr, envir, enclos) (from #4) : …
Run Code Online (Sandbox Code Playgroud)

r lazy-evaluation dplyr

9
推荐指数
1
解决办法
2962
查看次数

标签 统计

dplyr ×1

lazy-evaluation ×1

r ×1