【发布时间】:2016-11-25 00:43:24
【问题描述】:
我试图在一个函数中使用 dplyr 连接两个表,其中一个变量名由函数的参数定义。在其他 dplyr 函数中,通常有一个可用于非标准评估的版本,例如select & select_、rename 和 rename_ 等,但不适用于 _join 家族。我找到了this answer,但我无法让它在下面的代码中工作:
df1 <- data.frame(gender = rep(c('M', 'F'), 5), var1 = letters[1:10])
new_join <- function(df, sexvar){
df2 <- data.frame(sex = rep(c('M', 'F'), 10), var2 = letters[20:1])
# initial attempt using usual dplyr behaviour:
# left_join(df, df2, by = c(sexvar = 'sex'))
# attempt using NSE:
# left_join(df, df2,
# by = c(eval(substitute(var), list(var = as.name(sexvar)))) = 'sex'))
# attempt using setNames:
# left_join(df, df2, by = setNames(sexvar, 'sex'))
}
new_join(df1, 'gender')
第一次和第二次尝试都报错
错误:在 rhs 中找不到“sexvar”列,无法加入
虽然最后一次尝试给出了错误
错误:在 lhs 中找不到“性别”列,无法加入,
这至少表明它知道我想要列 gender,但不知何故不将其视为列标题。
谁能指出我哪里出错了?
【问题讨论】: