"..1" в теле "[[.data.frame"
Когда я смотрю содержимое [[.data.frame
на моем ПК, это то, что я получаю:
> get("[[.data.frame")
function (x, ..., exact = TRUE)
{
na <- nargs() - (!missing(exact))
if (!all(names(sys.call()) %in% c("", "exact")))
warning("named arguments other than 'exact' are discouraged")
if (na < 3L)
(function(x, i, exact) if (is.matrix(i))
as.matrix(x)[[i]]
else .subset2(x, i, exact = exact))(x, ..., exact = exact)
else {
col <- .subset2(x, ..2, exact = exact)
i <- if (is.character(..1))
pmatch(..1, row.names(x), duplicates.ok = TRUE)
else ..1
.subset2(col, i, exact = exact)
}
}
<environment: namespace:base>
Я привык к ...
, но это первый раз, когда я увидел ..1
и ..2
. Быстрый поиск в R help, и Google вернул в основном мусор, так как точки часто интерпретируются как заполнители, поэтому я надеюсь, что кто-то здесь может дать мне указатель? Или я пропущу что-то ужасно очевидное? Откуда они берутся и как я могу их использовать?
Ответы
Ответ 1
Это способ ссылки на 1-й, 2-й,... элементы специального парного списка ...
. Итак, ..1
- это способ обращения к первому элементу ...
, ..2
относится ко второму элементу ...
и т.д.
Это упоминается в руководстве R Internals в разделе 1.5.2 Dot-dot-dot arguments, соответствующий бит которого:
Значение ...
является (специальным) парным списком, чьи элементы обозначаются специальными символами ..1
, ..2
,... которые имеют бит бит DDVAL
: когда один из них встречается он просматривается (через ddfindVar
) в значении символа ...
в кадре оценки.
Ответ 2
Чтобы добавить к Gavin ответ:
Они также кратко упоминаются на странице справки зарезервированных слов (?Reserved
).
На самом деле простой пример использования -
f <- function(...) print(..1)
f(x = 99) #prints 99
f() #throws an error