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

15

如果我在管道中使用recode,就会出现错误:

df <-  df %>%
  recode(unit, .missing="g")

Error in UseMethod("recode") : no applicable method for 'recode' applied to an object of class "c('tbl_df', 'tbl', 'data.frame')"

如果我将其从"pipe"中分离出来,则它可以正常工作:

df$unit <- recode(df$unit, .missing="g")

有什么想法吗?如果可能的话,我想继续保持在这个管道里。

1个回答

27

dplyr 中与 baseR 相同的解决方案是在 mutate 内使用它:

df %>%
    mutate(unit = recode(unit, .missing="g"))

直接在 %>% 之后链式使用 recode,会将数据框作为第一个参数传递给 recode,这与 recode 的参数不一致。第一个参数 .x 需要是一个向量;与其他一些 dplyr 函数不同,recode 不使用非标准评估方法来将 unit 解释为名为 df 中该列的名称。大多数设计用于直接使用管道的函数都将数据框作为其第一个参数和输出。您可以在此处了解有关 magrittr 和管道工作原理的更多信息

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接