【问题标题】:Using dplyr quosures with mutate()使用 dplyr quosures 和 mutate()
【发布时间】:2018-02-13 12:04:43
【问题描述】:

阅读Programming with dplyr 指南,我收到一个意外错误。

事实上,尝试使用summarize 的示例非常有效,但如果我尝试使用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 中的错误:参数类型无效

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

我错过了什么?

【问题讨论】:

    标签: r dplyr quosure


    【解决方案1】:

    您只需要在每个“bang bang”/取消引用 (!!varX) 周围加上括号:

    mutate(x = ((!!var1) - (!!var2))) %>%
    

    完整代码:

    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。如此相似的包,一起工作并提供不一样的重复方法非常不方便......感谢您的帮助!
    • 不客气。我为 mutate 添加了一个 dplyr 参考以增强可重复性,
    猜你喜欢
    • 2017-08-08
    • 2016-01-28
    • 1970-01-01
    • 2015-05-02
    • 2018-10-19
    • 2016-01-10
    • 1970-01-01
    • 2018-11-17
    • 2021-07-27
    相关资源
    最近更新 更多