【发布时间】:2019-11-28 15:30:39
【问题描述】:
我正在尝试将列名作为参数传递给在其中使用 dplyr 函数的函数。
围绕这个主题已经提出了多个问题,我尝试了所有问题,一切似乎都会引发一些或其他错误。
我用 enquo 和 !!如给定here。尝试使用! as_label 来解决我使用this 从上一步中得到的错误。如here 所述,还尝试使用 group_by_ 而不是 group_by。我也尝试过 curl 运算符的解析
userMaster <- structure(list(user_id = c(1, 2, 3, 4, 5), city = structure(c(5L,
5L, 8L, 9L, 10L), .Label = c("Austin", "Boise", "Boston", "Chicago",
"Dallas", "Denver", "Detroit", "Kansas City", "Las Vegas", "Los Angeles",
"Manhattan", "Miami", "Minneapolis", "New York City", "Oklahoma City",
"Omaha", "Phoenix", "Saint Louis", "San Francisco", "Washington DC"
), class = "factor"), source = structure(c(2L, 2L, 2L, 2L, 2L
), .Label = c("Adwords", "Organic", "Search Ads"), class = "factor")), row.names = c(NA,
5L), class = "data.frame")
userCount <- function(table, metric){
col_enquo <- enquo(metric)
summary <- table %>% select(!! (col_enquo), source, user_id) %>%
group_by_(!! (col_enquo), source) %>% summarise(users = n_distinct(user_id)) %>%
left_join(table %>% group_by(source) %>%
summarise(total = n_distinct(user_id))) %>% mutate(users/total)
return(summary)
}
genderDemo <- userCount(userMaster, city)
我遇到各种类型的错误 -
Error: `quos(desire)` must evaluate to column positions or names, not a list
Error in !as_label(col_enquo) : invalid argument type
Error: Quosures can only be unquoted within a quasiquotation context.
# Bad:
list(!!myquosure)
# Good:
dplyr::mutate(data, !!myquosure)
【问题讨论】: