首页 > 解决方案 > 列表上的 mutate_impl(.data, dots) 错误

问题描述

我有一个数据框,我想添加一个包含匹配模式的列,我存储在一个列表中,如下所示:

这是我的数据框:

order_lines <- tibble(
  order_number = c(100, 200, 300, 400, 500, 600),
  description = c("xyz", "axyz", "abc", "wabc", "abcla", "ggg")
)

这是我想在 order_lines$description 中查找的模式列表:

ref <- list("xyz", "abc")

我创建了一个函数来做到这一点:

extractor <- function(df, pat){
  df <- df %>%
        mutate(references = str_extract(string = description, pattern = pat))
  df
}

但是当我运行时extractor(df = order_lines, pat = ref),我得到的是下一个错误: 'mutate_impl(.data,dots)中的错误:评估错误:'type'没有适用的方法应用于“list”类的对象。'

当我第一次遇到这个问题时,我认为这很容易解决,因为我发现将列表与 dplyr::mutate 一起使用是有问题的。我仍然相信该列表涉及但我不知道如何解决它。

我不知道会话信息在这种情况下是否有用:

R 版本 3.4.4 (2018-03-15) 平台:x86_64-pc-linux-gnu (64-bit) 运行于:Ubuntu 18.04.1 LTS

提前致谢。

标签: listdplyr

解决方案


最后,我通过mutate从函数中删除并$改为使用找到了解决方案。这是新功能:

extractor <- function(df, pat) {
  df$references <- str_extract(string = description, pattern = pat))
  df
}

然后我使用 purrr::map 将该函数应用于我的每个元素 list ref,即:

ref %>%
  map(extractor, df = order_lines)

我希望这对将来的某人有所帮助。


推荐阅读