当我将其插入到函数中而不起作用时,而不是单独使用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)
这两个代码是相同的,但结果是出乎意料的,如下所示:
> fun(data1, "a")
a x1 coldf1
1 1 2 1
2 2 3 1
> data1 %>% mutate("a" = 1)
a x1
1 1 2
我知道相等的赋值有问题,并且left_join函数中也发生了同样的问题。是否有针对这些问题的通用解决方案?
您无法使用来做到这一点dplyr
,后者在“非标准评估”(NSE)中占了很大比重。在您的函数内部,dplyr
可以看到coldf1 = 1
并分配一个新列,就像您可以做的那样df1 %>% mutate(somethingnew = 3.1415)
。
您需要使用rlang
的转义机制(带有:=
)...
fun <- function(df1, coldf1) {
df1 %>% mutate(!!coldf1 := 1)
}
data1
# a x1
# 1 1 2
# 2 2 3
fun(data1, "a")
# a x1
# 1 1 2
# 2 1 3
或基本R:
fun <- function(df1, coldf1) { df1[[coldf1]] <- 1; df1; }
fun(data1, "a")
# a x1
# 1 1 2
# 2 1 3
(尽管我假设您的示例已简化,但可能并非如此简单)
无论如何,请访问“使用dplyr编程”,https: //dplyr.tidyverse.org/articles/programming.html 。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句