У меня вопрос по поводу аргументов точка-точка-точка.Рассмотрим следующую функцию `foo =
foo <- function(x, ...){
require(classInt);
intvl = classIntervals(x, ...);
return(intvl);
}
Функция прекрасно работает для следующих вызовов
x = runif(100, 0, 100);
y1 = foo(x, n = 5, style = 'quantile');
y2 = foo(x, style = 'equal');
Но когда я пытаюсь использовать аргумент style = 'fixed', который требуетВ качестве аргумента fixedBreaks я получаю
y3 = foo(x, style = 'fixed', fixedBreaks = seq(0, 100, 20))
Ошибка в eval (expr, envir, enclos): список ... не содержит 2 элементов
Обратите внимание, что следующее работает отлично
y5 = classIntervals(x, style = 'fixed', fixedBreaks = seq(0, 100, 20))
Я подозреваю, что это как-то связано с правилами области видимости, но я не смог это указать.Любая помощь в этом была бы очень признательна.
РЕДАКТИРОВАТЬ.Я сделал более простой взлом, который заставляет его работать.Я думаю, что это проблема match.call, так как та же проблема существует для style = 'pretty'.Беглый взгляд на код показывает, что это два стиля, для которых создаются такие match.calls, поэтому вполне вероятно, что это источник ошибки.В любом случае, вот мой предложенный взлом
foo2 <- function(x, ...){
require(classInt);
y = list(...); y$var = x;
intvl = do.call('classIntervals', y);
}
y6 = foo2(x, style = 'fixed', fixedBreaks = seq(0, 100, 20))
Я думаю, что ответ Ричи на мой вопрос проливает некоторый свет на то, почему мой предыдущий код не работал.Но я до сих пор не понимаю, почему это так.