如果一个函数有一个参数,并且省略号和两者都以相同的字母开头,我遇到了一种奇怪的行为。 以下是一个简单的例子。
> testfun=function(aa=0, ...) {print(aa); list(...)}
> testfun(b=1)
[1] 0
$b
[1] 1
> testfun(a=1)
[1] 1
list()
当我调用
testfun(b=1)
时,一切都正常,打印出aa
的值为0,并返回包含元素b=1的列表。然而,如果我调用testfun(a=1)
,则aa
现在为1,返回空列表。很显然,如果有一个参数以与传递给...
相同的字母开头,则会更改该参数并且...
将被丢失。知道这是为什么吗?有没有办法避免这种情况? 在我的实际问题中,
...
由用户提供,他们可能使用任何名称作为参数(除了像这里的aa那样已经是函数的参数)。
testfun(a=1)
中的a
被视为aa
的缩写。如果您尝试testfun(aaa = 1)
,则不会出现这种行为。 - John Colemana
部分匹配aa
,但不匹配aaa
。 - Anoushiravan R