【发布时间】: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 <- enquo(value)位。结果还是一样。我最初称它为filter。
标签: r function dplyr nse tidyeval