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