Використання `...` (три крапки або крапка-крапка) у функціях [дублікат]


84

Де я можу знайти документацію щодо використання ...функцій? Приклади були б корисними.


3
Для користувачів python, які вивчають R, швидка відповідь буде такою ...: R еквівалент введення ключового слова python ( 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()щоразу викликається неодноразово з різними аргументами. Запустіть код і перевірте, чи можете ви зрозуміти, що відбувається.
Richie Cotton,

3
Це було б відмінний приклад , щоб продемонструвати , ...length()як добре
MichaelChirico

20

Вам слід перейти до "Визначення мови 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)для досягнення того самого результату)


1
Якщо це не вказано, звідки ви знаєте, чи законне воно чи дійсне?
четвер

2
@qed trim- це аргумент meanфункції. ...В sapplyє механізмом , trimякі будуть передані mean.
Річі Коттон,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.