【问题标题】:Function issue. Tidyeval filtering功能问题。 Tidyeval过滤
【发布时间】:2019-04-20 10:13:42
【问题描述】:

这里有什么问题?这有效:

iris %>% 
  filter(Species == "setosa") %>% 
  summarise(msl = mean(Sepal.Length), msw = mean(Petal.Width))

并产生:

    msl   msw
1 5.006 0.246

但是这个功能不起作用:

means <- function(data, value){
  data <- enquo(data)
  value <- enquo(value)
  data %>% 
    filter(Species == !!value) %>% 
    summarise(msl = mean(Sepal.Length), msw = mean(Petal.Width))
}

means(iris, "setosa") 产生此错误:

UseMethod("filter_") 中的错误: 没有适用于“filter_”的方法应用于“c('quosure','formula')”类的对象 调用自:filter_(.data, .dots = compat_as_lazy_dots(...))

【问题讨论】:

  • 你为什么要filter = enquo(value)?你根本没有使用那个filter。几行之后的filter 将成为filter 函数。或者实际上,它将是 a 过滤器功能,它可能是 dplyr 中的那个,也可能是 dplyr 踩踏或其他一些功能。使用所有库调用和所有版本号制作一个最小的可重现示例。
  • tidyverse 的版本号不显示你实际使用的包的版本号。列出它们。您使用的是哪些软件包?
  • 这是一个可重现的例子。就是 R 自带的iris 数据集。
  • 只是 tidyverse。这只是一个示例数据集。
  • 更改了value &lt;- enquo(value) 位。结果还是一样。我最初称它为filter

标签: r function dplyr nse tidyeval


【解决方案1】:

错误消息非常简单,您无法过滤 quosure。我不知道您为什么要查询您的数据,但这会得到您想要的:

means <- function(data, value){

  value <- enquo(value)
  data %>% 
    filter(Species == !!value) %>% 
    summarise(msl = mean(Sepal.Length), msw = mean(Petal.Width))

}

【讨论】:

  • 感谢您的信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-05
  • 1970-01-01
  • 2012-03-26
  • 1970-01-01
  • 2023-03-26
  • 1970-01-01
相关资源
最近更新 更多