[R] Odp: ^ operator

Petr PIKAL petr.pikal at precheza.cz
Mon Nov 16 14:20:00 CET 2009


Hi

r-help-bounces at r-project.org napsal dne 16.11.2009 13:27:03:

> but with complex, I get complex numbers for the first and last elements:
> 
> > (as.complex(tmp))^(1/3)
> [1] 0.01969170+0.03410703i 0.03478442+0.00000000i 0.03285672+0.00000000i
> [4] 0.08950802+0.00000000i 0.05848363+0.10129661i

And that is a right answer

> 
> whereas for the first element, we get the followings.
> 
> Moreover, 
> > -6.108576e-05^(1/3)
> >  [1] -0.03938341
> and
> > -(6.108576e-05^(1/3))
> [1] -0.03938341
> and
>  -((6.108576e-05)^(1/3))
> [1] -0.03938341
> 

No. With all constructions like above you compute a cube root of 
***positive*** number and then you put *-* sign before the result, hence 
the same result.

Try instead to make a cube root of negative number.

 (-6.108576e-05)^(1/3)
[1] NaN

This is what you exactly do by the first call. Beware also that 1/3 is not 
exactly representable in binary arithmetic and so you actually do not 
compute cube root but some root which is quite near to cube root.

> (1000^(1/3))-10
[1] -1.776357e-15

If you want cube root and have negative numbers you need probably 
something like

sign(tmp) * abs(tmp)^(1/3)


> give the same results.
> 
> so using () doesn't preserve any thing

You need to use parentheses on correct places. To see what is the 
precedence of operators see

?Syntax 

Regards
Petr


> 
> --- On Mon, 11/16/09, Petr PIKAL <petr.pikal at precheza.cz> wrote:
> 
> > From: Petr PIKAL <petr.pikal at precheza.cz>
> > Subject: Odp: [R] ^ operator
> > To: "carol white" <wht_crl at yahoo.com>
> > Cc: r-help at stat.math.ethz.ch
> > Date: Monday, November 16, 2009, 3:40 AM
> > Hi
> > 
> > AFAIK, this is issue of the preference of operators. 
> > 
> > r-help-bounces at r-project.org
> > napsal dne 16.11.2009 11:24:59:
> > 
> > > Hi,
> > > I want to apply ^ operator to a vector but it is
> > applied to some of the 
> > > elements correctly and to some others, it generates
> > NaN. Why is it not 
> > able to
> > > calculate -6.108576e-05^(1/3) even though it exists?
> > > 
> > > 
> > >  tmp
> > > [1] -6.108576e-05  4.208762e-05 
> > 3.547092e-05  7.171101e-04 
> > -1.600269e-03
> > > > tmp^(1/3)
> > > [1]        NaN 0.03478442
> > 0.03285672 0.08950802        NaN
> > 
> > This computes (-a)^(1/3) which is not possible in real
> > numbers. You have 
> > to use as.complex(tmp)^(1/3) to get a result.
> > 
> > > > -6.108576e-05^(1/3)
> > > [1] -0.03938341
> > 
> > this is actually
> > -(6.108576e-05^(1/3))
> > 
> > Regards
> > Petr
> > 
> > 
> > > 
> > > ______________________________________________
> > > R-help at 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.
> > 
> > 
> 
> 
> 
> 
> ______________________________________________
> R-help at 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.




More information about the R-help mailing list