【发布时间】:2011-03-06 00:01:25
【问题描述】:
我对点-点-点参数的范围有疑问。考虑以下函数`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))
我怀疑这与范围规则有关,但一直无法确定。对此的任何帮助将不胜感激。
编辑。我拼凑了一个更简单的 hack 让它工作。我认为这是一个 match.call 问题,因为 style = 'pretty' 也存在同样的问题。快速浏览一下代码就会发现,这两种风格都是针对这种风格进行 match.call 的,所以这很可能是错误的来源。无论如何,这是我提出的黑客攻击
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))
我认为 Richie 对我的问题的回答为我早期的代码为何无法运行提供了一些线索。但是,我还是不明白为什么会这样。
【问题讨论】:
-
在我看来就像
classIntervals中的一个错误。作者试图看中match.call -
嗯。我应该给包裹的作者发电子邮件,看看他/她可能会说什么。谢谢提示