Использование `…` (трех точек или точка-точка-точка) в функциях [дубликат]

84

Где найти документацию по использованию ...функций in? Примеры были бы полезны.

Брэндон Бертельсен
источник
3
Для пользователей Python, изучающих R, быстрый ответ будет заключаться в том, что ...это R-эквивалент ключевого слова python input ( def func(**kwargs))
Анна,

Ответы:

75

Для описания используется слово ...«многоточие». Знание этого должно облегчить поиск информации о конструкции. Например, первое попадание в Google - это еще один вопрос на этом сайте: как использовать функцию многоточия в R при написании собственной функции?

Джон Цвинк
источник
3
На самом деле официальное название в R является dots, например , на странице справки по имени ?dotsи «многоточие» даже не упоминается на странице
MichaelChirico
По поводу файлов справки ?dotsу меня не работает, но ?'...'работает.
coip
54

Небольшой пример для начала.

f <- function(x, ...)
{
  dots <- list(...)                   #1
  if(length(dots) == 0) return(NULL) 
  cat("The arguments in ... are\n")
  print(dots)
  f(...)                              #2
}

f(1,2,3,"a", list("monkey"))

Функция,, fсохраняет все входные аргументы, кроме первого, в переменной с многоточием. Для доступа к его содержимому проще всего преобразовать его в список (1). Однако в основном используется для передачи аргументов подфункциям, что не требует преобразования (2).

Ричи Коттон
источник
Почему в # 2 снова вызываем ту же функцию f?
Jiapeng Zhang
1
@JiapengZhang Это пример рекурсивной функции. f()вызывается повторно каждый раз с разными аргументами. Запустите код и посмотрите, сможете ли вы понять, что происходит.
Ричи Коттон
2
Это было бы отличный пример , чтобы продемонстрировать , ...length()как хорошо
MichaelChirico
19

Вам следует перейти к «Определению языка R», раздел 2.1.9 Точка-точка-точка . Он поставляется вместе с установкой R. Запустите help.start()интерактивный сеанс, чтобы вызвать справку HTML, и щелкните ссылку Определение языка R. Вы также можете использовать PDF- или HTML- версию с основного сайта.

В любом случае, ...используется для сопоставления неуказанных формальных аргументов функции.

args(sapply)                                                                                                               
function (X, FUN, ..., simplify = TRUE, USE.NAMES = TRUE)                                                                    
NULL   

sapply(mtcars, mean, trim = .5)                                                                                            
    mpg     cyl    disp      hp    drat      wt    qsec      vs      am    gear                                              
 19.200   6.000 196.300 123.000   3.695   3.325  17.710   0.000   0.000   4.000                                              
   carb                                                                                                                      
  2.000 

Как видите, я прошел, trim = .5хотя это не указано как формальный аргумент sapplyфункции.

(обратите внимание, что этот пример тривиален, вы можете использовать sapply(mtcars, median)для достижения того же результата)

aL3xa
источник
1
Если он не указан, откуда вы знаете, что он законный или действительный?
ответ дан 03
1
@qed trim- аргумент meanфункции. ...В sapplyявляются механизмом , trimкоторые будут переданы mean.
Ричи Коттон,