0

我正在学习 R 并参考一本书。书中的代码定义了一个新函数,然后它有一行 - “args <- list(...)”
我理解当我们用 (...) 定义一个函数时,这意味着我们可以传递一个不同的数字该函数的参数。上面的行是否接受用户传递给函数的所有参数,然后将它们组合成一个列表?

4

2 回答 2

2

嗯,不是真的。它仅将函数调用中不匹配的参数转换为“args”列表。

funtest <- function(a, b, ..., d="junk") { dots<-list(...); print(dots) }
> funtest( 1,2,3,4,5)
[[1]]
[1] 3

[[2]]
[1] 4

[[3]]
[1] 5

只有位置不匹配的参数才会进入 list(..) 值。如果匹配是按名称完成的,那么再次匹配的只是“剩余”参数...

> funtest( 1,2,3,a=4,b=5)
[[1]]
[1] 1

[[2]]
[1] 2

[[3]]
[1] 3

和一点建议。使用变量名 'args' 可能不是一个好主意,因为还有一个名为args. 从长远来看,您可能会混淆您自己或您的读者:

> args(funtest)
function (a, b, ..., d = "junk") 
NULL
于 2013-07-12T23:00:56.597 回答
1

这是正确的,并且...继承了这些参数的名称和顺序(如果可用)。

> f <- function(...) { return( list(...) ) }
> f(1, 2, apple=3, banana=4)
[[1]]
[1] 1

[[2]]
[1] 2

$apple
[1] 3

$banana
[1] 4

在您学习时,编写这些玩具函数并以这种方式检查输出也很有用。

于 2013-07-12T22:53:31.477 回答