當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。