dplyr函数内部行为不一致

dplyr函数内部行为不一致,r,function,dplyr,variable-assignment,R,Function,Dplyr,Variable Assignment,当我将dplyr::mutate函数插入到函数中,而不是单独使用dplyr::mutate函数时,就会出现这个问题,因为它不起作用!看: library(tidyverse) data1<-data.frame(a=c(1:2), x1=c(2:3)) fun <- function(df1, coldf1){ df1 %>% mutate(coldf1 = 1) %>% return() } fun(data1, "a") data1 %&g

当我将dplyr::mutate函数插入到函数中,而不是单独使用dplyr::mutate函数时,就会出现这个问题,因为它不起作用!看:

library(tidyverse)
data1<-data.frame(a=c(1:2), x1=c(2:3))

fun <- function(df1, coldf1){
  df1 %>% mutate(coldf1 = 1) %>% return()
}

fun(data1, "a")
data1 %>% mutate("a" = 1)

我知道等式赋值有问题,同样的问题也发生在左连接函数中。对于这些事情有一个通用的解决方案吗?

你不能用
dplyr
来解决这个问题,因为dplyr严重陷入了“非标准评估”(NSE)。在函数内部,
dplyr
查看
coldf1=1
并分配一个新列,就像您可以执行
df1%>%mutate(somethingnew=3.1415)
一样

您需要使用
rlang
的转义机制(使用
:=

fun%变异(!!coldf1:=1)
}
数据1
#x1
# 1 1  2
# 2 2  3
乐趣(数据1,“a”)
#x1
# 1 1  2
# 2 1  3
或基本R:


fun您不能像使用dplyr那样使用
coldf1
,请查看
dplyr
rlang
等中的非标准评估(NSE)。
> fun(data1, "a")
  a x1 coldf1
1 1  2      1
2 2  3      1
> data1 %>% mutate("a" = 1)
  a x1
1 1  2