如何检查R的参数(...)中是不是定义了任何变量?
Posted
技术标签:
【中文标题】如何检查R的参数(...)中是不是定义了任何变量?【英文标题】:How to check if any variable is defined in argument (...) in R?如何检查R的参数(...)中是否定义了任何变量? 【发布时间】:2021-08-26 16:38:06 【问题描述】:如果我有一个带有参数 (...) 的函数,并且想要检查参数中是否定义了变量。我怎样才能做到这一点?我已经查看了此链接提供的解决方案: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
。
【问题讨论】:
【参考方案1】:这就够了吗?
# 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
【讨论】:
是的。这会有所帮助。谢谢!【参考方案2】:通常在将参数传递给其他函数时使用...
,而不是在函数本身中使用它们时。如果您想评估参数值或不评估它,它也会有所不同。如果你需要后者,那么你可以做类似的事情
f = function(...)
mc <- match.call(expand.dots = TRUE)
"a" %in% names(mc)
这将对两者都返回 true
f(a = 4)
f(a = foo)
即使foo
不存在。
【讨论】:
好的。知道了。只是我的意图是分两步:1)根据...
中定义的参数选择函数。 2) 将参数传递给函数。以上是关于如何检查R的参数(...)中是不是定义了任何变量?的主要内容,如果未能解决你的问题,请参考以下文章