dots {base} | R Documentation |
..., ..1
, etc used in Functions
Description
...
and ..1
, ..2
etc are used to refer to
arguments passed down from a calling function. These (and the
following) can only be used inside a function which has
...
among its formal arguments.
...elt(n)
is a functional way to get ..n
and
basically the same as eval(paste0("..", n))
, just more elegant
and efficient.
Note that switch(n, ...)
is very close, differing by returning
NULL
invisibly instead of an error when n
is zero or
too large.
...length()
returns the number of expressions in ...
, and
...names()
the names
.
These are the same as length(list(...))
or names(list(...))
but without evaluating the expressions in ...
(which happens with
list(...)
).
Evaluating elements of ...
with ..1
, ..2
,
...elt(n)
, etc. propagates visibility. This
is consistent with the evaluation of named arguments which also
propagates visibility.
Usage
...length()
...names()
...elt(n)
Arguments
n |
a positive integer, not larger than the number of expressions
in ..., which is the same as |
See Also
...
and ..1
, ..2
are reserved words in
R, see Reserved
.
For more, see the Introduction to R manual for usage of these syntactic elements, and dotsMethods for their use in formal (S4) methods.
Examples
tst <- function(n, ...) ...elt(n)
tst(1, pi=pi*0:1, 2:4) ## [1] 0.000000 3.141593
tst(2, pi=pi*0:1, 2:4) ## [1] 2 3 4
try(tst(1)) # -> Error about '...' not containing an element.
tst.dl <- function(x, ...) ...length()
tst.dns <- function(x, ...) ...names()
tst.dl(1:10) # 0 (because the first argument is 'x')
tst.dl(4, 5) # 1
tst.dl(4, 5, 6) # 2 namely '5, 6'
tst.dl(4, 5, 6, 7, sin(1:10), "foo"/"bar") # 5. Note: no evaluation!
tst.dns(4, foo=5, 6, bar=7, sini = sin(1:10), "foo"/"bar")
## "foo" "" "bar" "sini" ""
## From R 4.1.0 to 4.1.2, ...names() sometimes did not match names(list(...));
## check and show (these examples all would've failed):
chk.n2 <- function(...) stopifnot(identical(print(...names()), names(list(...))))
chk.n2(4, foo=5, 6, bar=7, sini = sin(1:10), "bar")
chk.n2()
chk.n2(1,2)