在函数内部将省略号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创建

解决方法

您可以使用listOfLists = [] with open(filename,"r") as msg: for line in msg: listOfLists.append(line.strip().replace(" ","").split(",")) msg.close() 捕获点中的值,并以一定程度使用enquos()进行扩展。这对两种情况都适用。

!!!

您可以从Tidy评估指南的Dealing with multiple arguments的部分中获取更多信息

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...