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



如果我有一个带参数(…(的函数,并且要检查参数中是否定义了变量。我该怎么做?我已经看过这个链接提供的解决方案:如何检查对象(变量(是否在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)
}

这对于两个都将返回true

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

即使在CCD_ 3不存在的情况下。

最新更新