问题描述
我在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(...,"low")`.
myfilter2 <- function(df,condi = NULL) {
if (!(is.null(condi))) {
df <- df %>%
mutate(
level = if_else(!!!condi,"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创建
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)