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

Использование функций `...` (трехточечная или точка-точка) в функциях

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

4b9b3361

Ответ 2

Небольшой пример, чтобы вы начали.

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).

Ответ 3

Вы должны перейти к "Определение языка 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) для достижения того же результата)