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


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

3 75

3 ответа:

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

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

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

вы должны перейти к "определению языка R", раздел 2.1.9 Точка-Точка-точка. Он поставляется в комплекте с установкой Р. Беги help.start() в интерактивном сеансе, чтобы вызвать HTML-справку, и нажмите на Определение Языка R ссылка. Вы можете использовать PDF или HTML версия с официального сайта, а также.

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

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 хотя это и не указано в качестве формального аргумента