当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R dots ...、..1 等在函数中使用


R语言 dots 位于 base 包(package)。

说明

.....1..2 等用于引用从调用函数传递下来的参数。这些(以及以下内容)只能在其形式参数中有 ... 的函数内部使用。

...elt(n) 是获取 ..<n> 的函数式方法,与 eval(paste0("..", n)) 基本相同,只是更加优雅和高效。请注意,switch(n, ...) 非常接近,不同之处在于,当 n 为零或太大时,会以不可见的方式返回 NULL,而不是返回错误。

...length() 返回 ......names() 中的表达式数量 names 。这些与 length(list(...))names(list(...)) 相同,但不评估 ... 中的表达式(这发生在 list(...) 中)。

使用 ..1..2...elt(n) 等评估 ... 的元素会传播 visibility 。这与命名参数的评估一致,命名参数也传播可见性。

用法

...length()
...names()
...elt(n)

参数

n

一个正整数,不大于 ... 中的表达式数量,与 ...length() 相同,与 length(list(...)) 相同,但后者计算 ... 中的所有表达式。

例子

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)

也可以看看

.....1,..2预订的中的单词R, 看Reserved.

有关更多信息,请参阅 Introduction to R 手册了解这些语法元素的用法,并参阅 dotsMethods 了解它们在正式 (S4) 方法中的使用。

相关用法


注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 ..., ..1, etc used in Functions。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。