dplyr :: recode为什么管道会产生错误?

dat*_*ter 12 r pipe dplyr recode

如果我在管道中使用重新编码,我收到一个错误:

df <-  df %>%
  recode(unit, .missing="g")
Run Code Online (Sandbox Code Playgroud)

UseMethod("recode")中的错误:没有适用于"recode"的方法应用于类"c('tbl_df','tbl','data.frame')的对象"

如果我将它拉出管道,它可以正常工作:

df$unit <- recode(df$unit, .missing="g")
Run Code Online (Sandbox Code Playgroud)

有什么想法吗?如果可能的话,我想留在管道里.

Psi*_*dom 19

相当于baseR解决方案dplyr是在里面使用它mutate:

df %>%
    mutate(unit = recode(unit, .missing="g"))
Run Code Online (Sandbox Code Playgroud)

直接链接recode之后%>%将所述数据帧传递到recode作为第一个参数,它不同意recode的参数.第一个参数.x需要是一个向量; 与其他一些dplyr函数不同,recode它不会使用某些非标准的评估魔法来解释unit为具有该名称的列df.设计用于直接与管道一起使用的大多数功能都有一个数据框作为其第一个参数及其输出.您可以在此处详细了解magrittr管道的工作原理.