在 R 3.0.2 中,missing() 函数可以告诉我们是否缺少形式参数。
如何避免硬编码传递给丢失的变量名称?例如在
demoargs <- function(a=3, b=2, d) {
f <- formals(demoargs) # Capture formal arguments
formalNames <- names(f) # get variable names: a, b, d
...
}
我希望能够在不以硬编码方式执行此操作的情况下检查缺少的形式,例如:
missing(formalNames[1]) # returns invalid use of missing!
与 missing(d) 不同,目的是迭代以有限数量的方式处理的大量可选参数。我曾希望 get 或 as.name 能让我走上正轨,但似乎并非如此。
或者,我怀疑我可以使用 vararg 参数 (...) 来做到这一点,但是调用者能够通过检查函数声明来检查可接受的可选参数会很好。
谢谢,
玛丽
最佳答案
您可能首先尝试过类似 missing(as.name(formalNames[1]))
的内容。或 missing(formalNames[1])
并发现它们不起作用。
他们不这样做的原因是 missing()
是那些奇怪的函数之一——library()
和 debug()
是其他几个 - 将接受名称或名称的字符表示作为参数。从 missing(a)
的意义上说,这是“不错的”和 missing("a")
都将检查函数调用是否包含提供的参数 a
;当你这样做时不是很好missing(formalNames[1])
然后它开始寻找一个名为 formalNames[1]
的不存在的参数.
解决方法是使用do.call()
,它在将第二个参数的元素传递给第一个参数中给出的函数之前计算它们的值。您可以这样做:
demoargs <- function(a=3, b=2, d) {
formalNames <- names(formals()) # get variable names: a, b, d
do.call(missing, list(formalNames[1]))
}
## Try it out
demoargs(a=42)
# [1] FALSE
demoargs()
# [1] TRUE
关于带有变量名的 R missing(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24872128/