带有变量名的 R missing()

标签 r function arguments

在 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/

相关文章:

r - 从数据框中对一列进行子集化,将子集保留为数据框

Matlab 对于类型 'C' 的输入参数未定义函数或方法 'double'

javascript - Eloquent Javascript - 关于参数对象的第 4 章

java - 更新 Maven 项目时出现空参数错误

javascript - 将 function.call 与此参数一起用于函数参数

r - 如何创建一个小于前一列值的新列

r - 使用 lapply(.SD, ...) 计算多个变量的多个聚合

r - R 中 xgboost 回归的置信区间

javascript - 在gridview pageindexchange事件上运行javascript函数

javascript - 事件处理程序和函数