【发布时间】:2019-04-03 03:41:51
【问题描述】:
目前,当我尝试将函数包装在我多次使用的 dplyr 和 purrr 完成的一些计算时,我遇到了一些非标准评估问题。
我已阅读有关 NSE 的信息,并且认为我知道我的功能无法正常工作的地方 - 但是,我无法弄清楚为什么会这样。
例如,我想围绕以下计算包装一个函数,其中分组变量以及新变量的名称、使用的分类变量和均值的输入变量应该是动态的:
Data <- Data %>%
group_by(WeekBeforeRelease) %>%
mutate(visitors_genreother_instr = map_dbl(Genre_Category, ~ mean(Visitors[Genre_Category != .x]))) %>%
ungroup() %>%
as.data.frame()
按照here 的描述,使用 NSE 将这个函数变成如下:
Function_Other <- function(ENDOGVAR, VARNAME, GROUP_MOVIE, GROUP_TIME){
ENDOGVAR <- enquo(ENDOGVAR)
VARNAME <- quo_name(enquo(VARNAME))
GROUP_MOVIE <- enquo(GROUP_MOVIE)
GROUP_TIME <- enquo(GROUP_TIME)
Data <<- Data %>%
group_by(!!GROUP_TIME) %>%
mutate(!!VARNAME := map_dbl(!!GROUP_MOVIE, ~mean(!!ENDOGVAR[!!GROUP_MOVIE != .x]))) %>%
ungroup() %>%
as.data.frame()
}
但是,这似乎不能很好地处理平均值计算中带括号的子集。如果我将 !!ENDOGVAR 替换为访客,则一切正常且按预期进行。但是,它会产生以下错误:
Error in NextMethod("[") : object '.x' not found
我很高兴能帮助我理解这个问题。
提前非常感谢!
回旋曲
【问题讨论】: