在 dplyr::summarize_at 中使用 tidyeval 时出现 'argument "e2" is missing with no default' 错误
Getting 'argument "e2" is missing with no default' error when using tidyeval within dplyr::summarize_at
我正在尝试捕获跨一堆变量的 summarize_at
操作。这是一个愚蠢的例子:
library(dplyr)
library(stringr)
starwars %>%
summarise_at(c("hair_color", "skin_color"),
~ sum(if_else(str_detect(., "brown"), 1, birth_year), na.rm = TRUE))
# A tibble: 1 x 2
hair_color skin_color
<dbl> <dbl>
1 2399. 3123.
假设我想将其捕获到一个函数中,我可以在其中将 birth_year
更改为其他内容。
myfun <- function(df, var) {
df %>%
summarize_at(c("hair_color", "skin_color"),
~ sum(if_else(str_detect(., "brown"), 1, !! enquo(var)), na.rm = TRUE))
}
myfun(starwars, birth_year)
Error in is_quosure(e2) : argument "e2" is missing, with no default
我错过了什么?我在 R v3.5.3
上使用 dplyr v0.8.0.1、stringr v1.4 和 rlang v0.3.1,运行
我猜这是一个错误,但同时你可以做
myfun <- function(df, var) {
df %>%
summarize_at(c("hair_color", "skin_color"),
funs(sum(if_else(str_detect(., "brown"), 1, !! enquo(var)), na.rm = TRUE)))
}
myfun(starwars, birth_year)
# A tibble: 1 x 2
# hair_color skin_color
# <dbl> <dbl>
# 1 2399. 3123.
# Warning message:
# funs() is soft deprecated as of dplyr 0.8.0
# please use list() instead
# # Before:
# funs(name = f(.)
# # After:
# list(name = ~f(.))
作为解决方法。你会收到一个软折旧警告,但你不应该听从那里的建议,因为这个错误位于你的函数的某个地方。
我正在尝试捕获跨一堆变量的 summarize_at
操作。这是一个愚蠢的例子:
library(dplyr)
library(stringr)
starwars %>%
summarise_at(c("hair_color", "skin_color"),
~ sum(if_else(str_detect(., "brown"), 1, birth_year), na.rm = TRUE))
# A tibble: 1 x 2
hair_color skin_color
<dbl> <dbl>
1 2399. 3123.
假设我想将其捕获到一个函数中,我可以在其中将 birth_year
更改为其他内容。
myfun <- function(df, var) {
df %>%
summarize_at(c("hair_color", "skin_color"),
~ sum(if_else(str_detect(., "brown"), 1, !! enquo(var)), na.rm = TRUE))
}
myfun(starwars, birth_year)
Error in is_quosure(e2) : argument "e2" is missing, with no default
我错过了什么?我在 R v3.5.3
上使用 dplyr v0.8.0.1、stringr v1.4 和 rlang v0.3.1,运行我猜这是一个错误,但同时你可以做
myfun <- function(df, var) {
df %>%
summarize_at(c("hair_color", "skin_color"),
funs(sum(if_else(str_detect(., "brown"), 1, !! enquo(var)), na.rm = TRUE)))
}
myfun(starwars, birth_year)
# A tibble: 1 x 2
# hair_color skin_color
# <dbl> <dbl>
# 1 2399. 3123.
# Warning message:
# funs() is soft deprecated as of dplyr 0.8.0
# please use list() instead
# # Before:
# funs(name = f(.)
# # After:
# list(name = ~f(.))
作为解决方法。你会收到一个软折旧警告,但你不应该听从那里的建议,因为这个错误位于你的函数的某个地方。