Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将dplyr quosures与mutate()一起使用_R_Dplyr_Mutate_Quosure - Fatal编程技术网

将dplyr quosures与mutate()一起使用

将dplyr quosures与mutate()一起使用,r,dplyr,mutate,quosure,R,Dplyr,Mutate,Quosure,阅读指南时,我遇到了一个意想不到的错误 事实上,使用summary尝试示例非常有效,但是如果使用mutate尝试类似的操作,代码将无法运行 这是我的密码: df = data.frame(A=c(464,3465,48,3415,357,21,657), B=c(12,15,985,35,67,13,467)) df %>% mutate(x = A-B) %>% pull(x) #returns the good output : #[1] 452 3450 -937

阅读指南时,我遇到了一个意想不到的错误

事实上,使用
summary
尝试示例非常有效,但是如果使用
mutate
尝试类似的操作,代码将无法运行

这是我的密码:

df = data.frame(A=c(464,3465,48,3415,357,21,657), B=c(12,15,985,35,67,13,467))

df %>% 
  mutate(x = A-B) %>%
  pull(x)
#returns the good output :
#[1]  452 3450 -937 3380  290    8  190

get.diff = function(var1, var2, data=df){
  var1 = enquo(var1)
  var2 = enquo(var2)
  data %>% 
    mutate(x = (!!var1 - !!var2)) %>%
    pull(x)
}
get.diff(A, B)
returns an error
以下是错误:

错误!var2:参数类型无效

我尝试了很多东西,但这是我最接近的指南样本


我错过了什么?

您只需要在每个“砰砰”的前后加上括号即可/unquoting(
!!varX
):

完整代码:

df = data.frame(A=c(464,3465,48,3415,357,21,657), B=c(12,15,985,35,67,13,467))

  df %>%
    dplyr::mutate(x = A-B) %>%
    pull(x)
  #returns the good output :
  #[1]  452 3450 -937 3380  290    8  190

  get.diff = function(var1, var2, data=df){
    var1 = enquo(var1)
    var2 = enquo(var2)
    data %>%
      dplyr::mutate(x = ((!!var1) - (!!var2))) %>%
      pull(x)
  }
  get.diff(A, B)

  [1]  452 3450 -937 3380  290    8  190

这是非常恼人的:你的代码在新的会话中像一个符咒一样工作,但是在我的会话中失败了,并且出现了相同的错误。好的,我明白了。我有
plyr::mutate
而没有
dplyr::mutate
。这样类似的包,一起工作,并提供重复的方法,而不是工作相同是非常不令人信服的。。。谢谢你的帮助!不客气。我添加了一个dplyr参考,用于突变以增强再现性,
df = data.frame(A=c(464,3465,48,3415,357,21,657), B=c(12,15,985,35,67,13,467))

  df %>%
    dplyr::mutate(x = A-B) %>%
    pull(x)
  #returns the good output :
  #[1]  452 3450 -937 3380  290    8  190

  get.diff = function(var1, var2, data=df){
    var1 = enquo(var1)
    var2 = enquo(var2)
    data %>%
      dplyr::mutate(x = ((!!var1) - (!!var2))) %>%
      pull(x)
  }
  get.diff(A, B)

  [1]  452 3450 -937 3380  290    8  190