【发布时间】:2018-06-09 22:13:52
【问题描述】:
我尝试编写一个简单的函数来包裹 dplyr::case_when() 函数。我阅读了https://cran.r-project.org/web/packages/dplyr/vignettes/programming.html 上的 programming with dplyr 文档,但无法弄清楚它如何与 case_when() 函数一起使用。
我有以下数据:
data <- tibble(
item_name = c("apple", "bmw", "bmw")
)
还有以下列表:
cat <- list(
item_name == "apple" ~ "fruit",
item_name == "bmw" ~ "car"
)
那我想写一个类似的函数:
category_fn <- function(df, ...){
cat1 <- quos(...)
df %>%
mutate(category = case_when((!!!cat1)))
}
不幸的是,category_fn(data,cat) 在这种情况下给出了评估错误。我想获得与通过以下方式获得的输出相同的输出:
data %>%
mutate(category = case_when(item_name == "apple" ~ "fruit",
item_name == "bmw" ~ "car"))
这样做的方法是什么?
【问题讨论】:
-
这应该可以开箱即用,有一个 GitHub 问题:github.com/tidyverse/dplyr/issues/3133。现在,请使用答案中建议的替代方案之一。
标签: r dplyr lazy-evaluation nse