% summar-6ren">
gpt4 book ai didi

r - 在 dplyr::summarize_at 中使用 tidyeval 时出现 'argument "e 2"is missing with no default' 错误

转载 作者:行者123 更新时间:2023-12-02 00:54:45 26 4
gpt4 key购买 nike

我正在 try catch 一组变量的 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(.))

作为解决方法。您会收到一个软折旧警告,但您不应该听从那里的建议,因为该错误存在于您的功能的某个地方。

关于r - 在 dplyr::summarize_at 中使用 tidyeval 时出现 'argument "e 2"is missing with no default' 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55125210/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com