【发布时间】:2020-10-15 23:32:24
【问题描述】:
我在 R 中有一个带有省略号 (dotdotdot) 的函数,它被解析为 dplyr::if_else,如下例所示。但是,错误告诉我,当变量确实在数据框中时,找不到该变量。我的问题很简单,如何将函数的省略号解析为管道内的 if_else 条件?我还尝试了 !!! 替代方法,将 ... 替换为正确的参数名称,但是它也不起作用
如果这是一个重复的问题,我深表歉意,但我在其他地方没有找到明确的答案。
非常感谢, 最好的,
library(tidyverse)
#> Warning: package 'tibble' was built under R version 4.0.3
data("mtcars")
myfilter <- function(df, ...) {
if (...length() != 0) {
df <- df %>%
mutate(
level = if_else(..., "high", "low")
)
} else{
df <- df %>%
mutate(
level = "high"
)
}
return(df)
}
# WORKS
df <- myfilter(mtcars)
"level" %in% names(df)
#> [1] TRUE
# DOES NOT WORK
df <- myfilter(mtcars, drat > 3)
#> Error: Problem with `mutate()` input `level`.
#> x object 'drat' not found
#> i Input `level` is `if_else(..., "high", "low")`.
myfilter2 <- function(df, condi = NULL) {
if (!(is.null(condi))) {
df <- df %>%
mutate(
level = if_else(!!!condi, "high", "low")
)
} else{
df <- df %>%
mutate(
level = "high"
)
}
return(df)
}
# WORKS
df <- myfilter2(mtcars)
"level" %in% names(df)
#> [1] TRUE
# DOES NOT WORK
df <- myfilter2(mtcars, drat > 3)
#> Error in myfilter2(mtcars, drat > 3): object 'drat' not found
由reprex package (v0.3.0) 于 2020 年 10 月 15 日创建
【问题讨论】:
标签: r function dplyr pipe ellipsis