NSE vs SE in mutate_
我一直在阅读,但是我无法理解R中的NSE与SE。我希望有人能正确解释。
1 | df=data.frame(a=1:6,b=7:12,c=13:18,d=rep(c("a","b"),each=3)) |
这是我所习惯的,并且有效:
1 | df %>% group_by(d) %>% mutate(new=sum(a)) |
现在我进入了新领域,这可行,但是会发出警告。有人可以向我解释如果不使用group_by_怎么办?
1 2 | var="d" df %>% group_by_(`var`) %>% mutate(new=sum(a)) |
Warning message: group_by_() is deprecated. Please use group_by()
instead
现在,在我真正想做的事情上,这只会引发错误:
1 2 3 | var="d" var2="a" df %>% group_by_(`var`) %>% mutate_(new=sum(`var2`)) |
Error in sum(var2) : invalid 'type' (character) of argument
我真的是想了解这里的基本原理...谢谢!
有关整洁评估的书是学习NSE的绝佳资源。您可能会发现第8章特别有用。
在您的情况下,您需要首先将字符串转换为符号变量名称:
1 2 | s1 <- sym(var) s2 <- sym(var2) |
如果直接在dplyr中使用
来执行此操作
1 2 3 4 | df %>% group_by( !!s1 ) %>% mutate( new=sum(!!s2) ) ## Or putting everything together df %>% group_by( !!sym(var) ) %>% mutate( new=sum(!!sym(var2)) ) |