Где поставить многоточие в перегрузках функции S3?

У нас есть класс S3, для которого мы определяем plot и другие общие функции. Мы не уверены, где ... должен идти. Есть два варианта:

  1. plot.hadronacf(x, col = "black", ...)
  2. plot.hadronacf(x, ..., col = "black")

Точно так же и для print. а также summary.,

В использовании summary кажется несовместимым

summary(object, ...)

## Default S3 method:
summary(object, ..., digits)
## S3 method for class 'data.frame'
summary(object, maxsum = 7,
       digits = max(3, getOption("digits")-3), ...)

## S3 method for class 'factor'
summary(object, maxsum = 100, ...)

## S3 method for class 'matrix'
summary(object, ...)

## S3 method for class 'summaryDefault'
format(x, digits = max(3L, getOption("digits") - 3L), ...)
 ## S3 method for class 'summaryDefault'
print(x, digits = max(3L, getOption("digits") - 3L), ...)

За print похоже, что многоточие подходит к концу:

print(x, ...)

## S3 method for class 'factor'
print(x, quote = FALSE, max.levels = NULL,
      width = getOption("width"), ...)

## S3 method for class 'table'
print(x, digits = getOption("digits"), quote = FALSE,
      na.print = "", zero.print = "0",
      right = is.numeric(x) || is.complex(x),
      justify = "none", ...)

## S3 method for class 'function'
print(x, useSource = TRUE, ...)

Кажется, что многоточие в конце используется в большинстве. Есть ли какое-то руководство для этого?

1 ответ

Решение

Там нет "правильный" способ сделать это. Это вопрос предпочтения или проектного решения, основанного на том, что, по вашему мнению, должна делать функция с "дополнительными параметрами". Например, с двумя вариантами A и B

summary(object, maxsum = 100, ...)  # A
summary(object, ..., maxsum = 100)  # B

Единственный способ передать maxsum до версии B по именованному параметру в вызове функции. Принимая во внимание, что версия A будет принимать второй неназванный параметр и передавать его maxsum, Они отличаются тем, насколько "важен" этот параметр для вызова функции.

Другие вопросы по тегам