[R] Sweave and complex numbers

Peter Dalgaard p.dalgaard at biostat.ku.dk
Mon Jul 11 15:04:52 CEST 2005


Duncan Murdoch <murdoch at stats.uwo.ca> writes:


> > Question: why does \verb=c(1,1+1i)= get printed as
> > \verb=c(1,1 + (0+1i))= ?
> 
> The R parser only understands pure imaginary constants as complex 
> numbers.  It parses 1+1i as the sum of the real constant 1 and the 
> complex constant 0+1i.
> 
> This isn't easy to work around.  Sweave could special case these, or the 
> parser or deparser could, but it looks messy to me.  I'd guess the best 
> solution would be if it happened in the parser (i.e. a real constant 
> plus an imaginary constant was folded into a complex constant), but 
> right now our parser doesn't do any sorts of optimizations like this. 
> It's not easy to add the first one, not least because the parser doesn't 
> know for sure that 1+1i really is a complex number:  you might have 
> redefined the meaning of "+".

Hmmmm... I'd say that the user would deserve what she gets in that
case. I suspect that the real issue is that R's tokenizer is
hand-written and not smart enough to recognize complex constants.
Figuring out whether there is a good reason for that or whether we
might actually use an automatic tokenizer like flex is somewhere on
the far end of my want-to-do list...

One thing that could be done quite immediately is to let the deparser
forget about a zero real part and drop the parentheses in that case.
After all "1i" is perfectly legal R, and

> identical(1i,0+1i)
[1] TRUE

(Those parse/deparse asymmetries are maddening. *Next* time we
redesign R we should get this straightened out....)

-- 
   O__  ---- Peter Dalgaard             Øster Farimagsgade 5, Entr.B
  c/ /'_ --- Dept. of Biostatistics     PO Box 2099, 1014 Cph. K
 (*) \(*) -- University of Copenhagen   Denmark          Ph:  (+45) 35327918
~~~~~~~~~~ - (p.dalgaard at biostat.ku.dk)                  FAX: (+45) 35327907




More information about the R-help mailing list