Подтвердить что ты не робот

"..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 вернул в основном мусор, так как точки часто интерпретируются как заполнители, поэтому я надеюсь, что кто-то здесь может дать мне указатель? Или я пропущу что-то ужасно очевидное? Откуда они берутся и как я могу их использовать?

4b9b3361

Ответ 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