在函数内部将省略号dotdotdot与dplyr :: if_else一起使用时找不到变量

问题描述

我在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 (将#修改为@)