i think the error message might be even better, but this would require '* to be even better. i know some will take it for lamenting: there is an ugly lack of consistency here:
1:2 # 1 2 1:2.5 # 1 2 (coercion double -> integer) 1:'2' # 1 2 (corecion character -> integer) 1:'a' # Error in 1:"a" : NA/NaN argument # In addition: Warning message: # NAs introduced by coercion 1 * 2 # 2 1 * '2' # Error in 1 * "2" : non-numeric argument to binary operator 1 * '2' # Error in 1 * "a" : non-numeric argument to binary operator in the two last cases, i'd expect, respectively, a successful computation (with a character -> numeric coercion of '2' to 2), and an error similar to the one for 1:'a'. the current error message isn't good, and what pat and stavros propose seems much better; i think it could be even better if 1 * '2' worked, and if 1 * 'a' caused an error of the form "cannot coerce 'a' to numeric for use with the arithmetic operator '*'". vQ Stavros Macrakis wrote: > Agreed, that's even better, e.g. > > Error in 1 * "a" : character argument not allowed for arithmetic > operator * > > For some reason (does anyone know the rationale?), in the case of factors, > you don't get an error, but a more explicit warning and an NA result: > > >> 2*factor(3) >> > [1] NA > Warning message: > In Ops.factor(2, factor(3)) : * not meaningful for factors > > This seems hazardous, especially since the user has to be sophisticated > enough to know about options(warn=2) to get a traceback for this. > > As for data frames, arithmetic operators seem to work if all the values are > numeric: > > >> 2*data.frame(a=1) >> > a > 1 2 > > It's a hard problem to make useful error messages for beginning users.... > > -s > > > On Mon, Jun 1, 2009 at 4:34 AM, Patrick Burns <pbu...@pburns.seanet.com>wrote: > > >> I thought Stavros' suggestion was going >> to be to have the error message say what >> type of offending object was found. If >> the message said that a list of class >> 'data.frame' was found (probably the leading >> case), then that would be much more helpful. >> >> Patrick Burns >> patr...@burns-stat.com >> +44 (0)20 8525 0696 >> http://www.burns-stat.com >> (home of "The R Inferno" and "A Guide for the Unwilling S User") >> >> Stavros Macrakis wrote: >> >> >>> On Sun, May 31, 2009 at 6:10 PM, jim holtman <jholt...@gmail.com> wrote: >>> >>> Message is very clear: >>> >>>> 1 * 'a' >>>> >>>> Error in 1 * "a" : non-numeric argument to binary operator >>>> >>>> >>> Though the user should have been able to figure this out, perhaps the >>> error >>> message could be improved? After all, it is not the fact that the operator >>> is *binary* that implies that its argument must be numeric, but that it is >>> *arithmetic*. The binary operator %in%, for example, takes non-numeric >>> arguments. >>> >>> Suggested replacement error message: >>> >>> non-numeric argument to arithmetic operator >>> >>> -s ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.