【发布时间】:2019-04-03 16:16:24
【问题描述】:
我偶然发现了这种行为,但不太理解。有人能解释一下吗?
我编写了以下函数,它给出了以下错误:
> MyFilter <- function(data, filtersVector) {
filtersVector <- quo(filtersVector)
result <- data %>% filter(Species %in% !!filtersVector)
result
}
> MyFilter(iris, c("setosa", "virginica"))
Error in filter_impl(.data, quo) :
Evaluation error: 'match' requires vector arguments.
但是,如果我按以下方式修改它,它会按预期工作:
> MyFilter <- function(data, filtersVector) {
otherName <- quo(filtersVector)
result <- data %>% filter(Species %in% !!otherName)
result
}
> MyFilter(iris, c("setosa", "virginica"))
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa
我也意识到在一个函数中我应该使用 enqou 来代替它,它工作正常。
> MyFilter <- function(data, filtersVector) {
filtersVector<- enquo(filtersVector)
result <- data %>% filter(Species %in% !!filtersVector)
result
}
> MyFilter(iris, c("setosa", "virginica"))
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa
但是,我仍然对上述行为感到困惑,任何解释都将不胜感激。
【问题讨论】: