如何检查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的参数(...)中是不是定义了任何变量?的主要内容,如果未能解决你的问题,请参考以下文章

Twig - 如何检查变量是不是为数字/整数

如何检查 JavaScript 中是不是存在变量?

如何检查 JavaScript 中是不是存在变量?

如何检查树枝中的变量是不是等于零并定义值

RMarkdown:如何将参数传递给在 R 中定义为变量的 bash 块?

如何在启动/调用批处理文件时检查是不是定义了参数?