Где поставить многоточие в перегрузках функции S3? - PullRequest
0 голосов
/ 08 января 2019

У нас есть класс 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 Ответ

0 голосов
/ 08 января 2019

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

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

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

...