Tengo una pregunta sobre el alcance de los argumentos dot-dot-dot. Considere el siguiente function`foo =Alcance de los argumentos punto-dot-dot
foo <- function(x, ...){
require(classInt);
intvl = classIntervals(x, ...);
return(intvl);
}
La función funciona muy bien para las siguientes llamadas
x = runif(100, 0, 100);
y1 = foo(x, n = 5, style = 'quantile');
y2 = foo(x, style = 'equal');
Pero cuando trato de utilizar el estilo = argumento 'fijo', que necesita un argumento así fixedBreaks , consigo
y3 = foo(x, style = 'fixed', fixedBreaks = seq(0, 100, 20))
error en eval (expr, AMBIENTALIZ, enclos): El ... la lista no contiene 2 elementos
cuenta que la siguiente aplicación funciona perfectamente
y5 = classIntervals(x, style = 'fixed', fixedBreaks = seq(0, 100, 20))
I suspsect que esto tiene algo que ver con reglas de alcance, pero han sido incapaces de poner mi dedo en la llaga. Cualquier ayuda sobre esto sería muy apreciada.
EDITAR. Arreglé un truco más simple que lo hace funcionar. Creo que es un problema match.call, ya que existe el mismo problema para style = 'pretty'. Una mirada rápida al código muestra que estos son los dos estilos para los que se realizan tales match.calls, por lo que es muy probable que esta sea la fuente de error. Cualquier caso, aquí está mi propuesta truco
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))
Creo que la respuesta de Richie a mi pregunta arroja algo de luz sobre por qué mi código anterior no funcionó. Pero, todavía no entiendo por qué lo hace.
Parece un error en 'classIntervals' para mí. El autor está tratando de ser elegante con 'match.call' – hadley
Hmmm. Debería enviar un correo electrónico al autor del paquete y ver lo que él/ella podría tener que decir. Gracias por la pista – Ramnath