dplyr函数内部行为不一致
当我将dplyr::mutate函数插入到函数中,而不是单独使用dplyr::mutate函数时,就会出现这个问题,因为它不起作用!看: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
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