dplyr函数内部行为不一致

问题描述

当我将其插入到函数中而不起作用时,而不是单独使用dplyr :: mutate函数,就会发生此问题!看:

10010000

这两个代码是相同的,但是结果却是出乎意料的:

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)

我知道相等的赋值有问题,并且left_join函数中也发生了同样的问题。这些东西有通用的解决方案吗?

解决方法

您无法使用dplyr来做到这一点,dplyr严重影响了“非标准评估”(NSE)。在您的函数内部,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 一起使用)...

fun <- function(df1,coldf1) { df1[[coldf1]] <- 1; df1; }
fun(data1,"a")
#   a x1
# 1 1  2
# 2 1  3

或基本R:

   "thothTest":{
      "9876":[
         "K"
      ],"5431":[
         "A","L"
      ],"5123":[
         "L"
      ]
   }

(尽管我假设您的示例已简化,但可能并非如此简单)

无论如何,请查看“使用dplyr编程” https://dplyr.tidyverse.org/articles/programming.html