如何检查 R 中的参数 (...) 中是否定义了任何变量?

How to check if any variable is defined in argument (...) in R?

如果我有一个带有参数 (...) 的函数,并且想检查参数中是否定义了变量。我怎样才能做到这一点?我已经看过 link: How to check if object (variable) is defined in R? 提供的解决方案。但是,它并没有解决我的问题。

# Scenario 1
exists("a")
# [1] FALSE

# Scenario 2
a <- 10
exists("a")
# [1] TRUE

# Define a function for remaining scenarios
f = function(...){exists("a", inherits = F)}

# Scenario 3
f()
# [1] FALSE

# Scenario 4
a <- 10
f()
# [1] FALSE

# Scenario 5
a <- 10
f(a = 5)
# [1] FALSE

我希望方案 5 中的答案是 TRUE

这够吗?

# Define a function for remaining scenarios
f = function(...){"a" %in% names(list(...))}

# Scenario 3
f()
# [1] FALSE

# Scenario 4
a <- 10
f()
# [1] FALSE

# Scenario 5
f(a = 5)
# [1] FALSE

f(a = 5)
[1] TRUE

通常在将参数传递给其他函数时使用 ...,而不是在函数本身中使用它们时。如果您想评估参数值或不评估它,它也会有所不同。如果你需要后者,那么你可以这样做

f = function(...) {
  mc <- match.call(expand.dots = TRUE)
  "a" %in% names(mc)
}

这将 return 对两者都成立

f(a = 4)
f(a = foo)

即使 foo 不存在。