当这些参数打算在 arg 列表中匹配时,您不能在dots
和之后的任何参数中使用未命名(编辑:...和缺少)参数。dots
为未命名参数自动发生的位置匹配仅在点之前的命名参数(在 arg 列表中)的典型参数处理中“起作用”。
> pp1 <- function(x, ...) { length( list(...))}
> pp1(1,z=NULL,xx=NULL,1)
[1] 3
> pp2 <- function(x, z, ...) { length( list(...))}
> pp2(1,z=NULL,xx=NULL,1)
[1] 2
> pp3 <- function(x, z, ...) { length( list(...))}
> pp3(1, ,xx=NULL,1)
[1] 2
> pp <- function(x, ...) { length( list(...))}
> pp(1, , xx=NULL, 1)
Error in pp(1, , xx = NULL, 1) : argument is missing, with no default
阅读match.call的帮助页面,第二种“常用情况”描述为:
将大部分调用传递给另一个函数,通常是model.frame。这里常见的习惯用法是使用expand.dots = FALSE,并删除匹配调用的...元素。
参数匹配的顺序(当不被规避时)在第 4.3.2 节“参数匹配”中描述:
- 位置匹配。任何不匹配的形式参数都按顺序绑定到未命名的提供参数。如果有一个 '...' 参数,它将占用剩余的参数,无论是否标记。
如果任何参数仍然不匹配,则声明错误。