我对dot-dot-dot参数的范围有疑问。考虑以下function`foo =以下电话点点参数的范围
x = runif(100, 0, 100);
y1 = foo(x, n = 5, style = 'quantile');
y2 = foo(x, style = 'equal');
但
foo <- function(x, ...){
require(classInt);
intvl = classIntervals(x, ...);
return(intvl);
}
功能的伟大工程,当我尝试使用样式=“固定”的说法,这需要一个fixedBreaks参数以及,我得到的eval
y3 = foo(x, style = 'fixed', fixedBreaks = seq(0, 100, 20))
错误(表达式,ENVIR,enclos): 的...列表中不包含2个元素
注意下面的作品完美
y5 = classIntervals(x, style = 'fixed', fixedBreaks = seq(0, 100, 20))
我suspsect,这已经是与作用域规则,但一直无法把我的手指上。任何对此的帮助将非常感激。
编辑。我修补了一个简单的黑客工具。我认为这是一个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))
我觉得里奇的回答我的问题阐明了为什么我前面的代码没有工作的一些情况。但是,我仍然不明白为什么这个。
看起来像'classIntervals'中的一个bug。作者正在尝试使用'match.call' – hadley 2011-03-06 01:56:48
嗯。我应该给包裹的作者发电子邮件,看看他/她可能要说些什么。感谢提示 – Ramnath 2011-03-06 02:07:58