William Dunlap
2009-Apr-17 18:07 UTC
[Rd] some .Primitive's generate odd missing-argument messages
Since R 2.8.0 (and up to 2.10.0-devel, but not in 2.7.1), if you call a function without a required argument and the missing argument is first evaluated inside certain .Primitive calls, then the error message about the missing argument is different from the normal one and is harder to understand. E.g., sometimes you get 'element 1 is empty': > (function(x)x>0)() Error in (function(x) x > 0)() : element 1 is empty; the part of the args list of '>' being evaluated was: (x, 0) and sometimes you get 'Non-numeric argument ...' > (function(qaz)log(qaz))() Error in log(qaz) : Non-numeric argument to mathematical function and sometimes the missingness of the argument in the caller is passed down to the callee: > (function(qaz,base)log(qaz,base))(qaz=10) # acts like base=exp(1) [1] 2.302585 Sometimes you get a direct message about the argument being missing: > (function(x)if(x) "yes" else "no")() Error in (function(x) if (x) "yes" else "no")() : argument "x" is missing, with no default In 2.7.1 the missingness of the base= argument to log was passed down, but the others gave the message "argument <x> is missing, with no default". The old uniform messsage made it easier to track down problems. Bill Dunlap TIBCO Software Inc - Spotfire Division wdunlap tibco.com