如何在函数循环中使用 list(...)

How to use list(...) in loop of function

请帮助我理解 ... 参数在函数中的工作原理。我正在尝试将值输入到我的函数中,如下所示:

test_data<-function(data, ...){
  pr <- list(...)
  nm <- names(data)
  for(i in seq_along(nm)){
    if(pr == nm[i]) nm<-(nm[-i])
  }
  return(nm)
}

这应该将任何值传递给 dots 并检查名称是否匹配,如果匹配则从数据名称中删除该名称。但是,当我这样做时,我得到以下信息:

test_data(mtcars, 'carb')
>NULL

我应该得到:

[1] "mpg"  "cyl"  "disp" "hp"   "drat" "wt"   "qsec"
 [8] "vs"   "am"   "gear" 

不需要 for 循环。你可以这样做:

注意:我没有将通过 ... 传递的参数包装在列表中,而是将它们放在向量中。

test_data <- function(data, ...) {
  pr <- c(...)
  nm <- names(data)
  nm[!nm %in% pr]
}

test_data(mtcars, "carb")
#>  [1] "mpg"  "cyl"  "disp" "hp"   "drat" "wt"   "qsec" "vs"   "am"   "gear"

# Example with multiple args
test_data(mtcars, "carb", "am", "foo", "bar")
#> [1] "mpg"  "cyl"  "disp" "hp"   "drat" "wt"   "qsec" "vs"   "gear"