I am more used to getting an error if you try to take the log of 0, like
this (in Perl):

perl -le 'for my $num (1, 0, -1, -2) { print log $num; }'
0
Can't take log of 0 at -e line 1.

R is different. With R, you do not even get a *warning* about log(0). Only
log() of negative number produces a warning:

echo "for (num in c(1, 0, -1, -2)) { print(log(num)); }" > ~/tmp/test1.R

R --no-save < ~/tmp/test1.R
...
> for (num in c(1, 0, -1, -2)) { print(log(num)); }
[1] 0
[1] -Inf
[1] NaN
[1] NaN
Warning messages:
1: In log(num) : NaNs produced
2: In log(num) : NaNs produced
>

I agree with you that Spearman's correlation's invariance to monotone
transformations is an advantage. It is R's happy attitude to -Inf and Inf
that puzzled me at first. Anyhow, verifying and/or preprocessing the input
to cor() is the answer to my questions.
Thank you again for the help!

Timur

On Fri, Sep 12, 2008 at 11:11 AM, Greg Snow <Greg.Snow@imail.org> wrote:

> Just out of curiosity, why do you want the spearman rank correlation to
> error in this case?
>
> One of the advantages of the spearman correlation is that it is invariant
> to monotone transformations, so most people that use it see the fact that
> corr(x,y, method='spearman') gives the same answer as cor(log(x), exp(y),
> method='spearman') to be the desired result.
>
> --
> Gregory (Greg) L. Snow Ph.D.
> Statistical Data Center
> Intermountain Healthcare
> greg.snow@imail.org
> (801) 408-8111
>
>
>
> > -----Original Message-----
> > From: Timur Shtatland [mailto:tshtatland@gmail.com]
> > Sent: Thursday, September 11, 2008 6:03 PM
> > To: Greg Snow
> > Cc: r-help@r-project.org
> > Subject: Re: [R] making spearman correlation cor() call fail
> > with log(0) as input
> >
> > You are right, Inf and -Inf are not considered errors in R,
> > they are accepted as input to Spearman's cor(), and so I will
> > have to check the input myself for such condition.
> > Thank you for pointing this out!
> >
> > Timur
> >
> > On Wed, Sep 10, 2008 at 8:50 PM, Greg Snow
> > <Greg.Snow@imail.org> wrote:
> > > Your code shows no errors only correct responses.
> > >
> > > If you want an error when R is generating correct results,
> > you will need to check for the conditions yourself.
> > >
> > > -----Original Message-----
> > > From: "Timur Shtatland" <tshtatland@gmail.com>
> > > To: "r-help@r-project.org" <r-help@r-project.org>
> > > Sent: 9/10/08 3:51 PM
> > > Subject: [R] making spearman correlation cor() call fail
> > with log(0)
> > > as input
> > >
> > >
> > > Hi,
> > >
> > > How can I make the cor(x, y, method="spearman") call to produce an
> > > error when the input to it (x, y) produces an error? Here
> > is a simple
> > > example:
> > >
> > >> a <- c(0, 1, 2)
> > >> b <- c(100, 2, 4)
> > >
> > > ## error:
> > >> log(a)
> > > [1]      -Inf 0.0000000 0.6931472
> > >
> > > ## error, as expected:
> > >> cor(log(a), log(b), method="pearson")
> > > [1] NaN
> > >
> > > ## not an error any more (not expected):
> > >> cor(log(a), log(b), method="spearman")
> > > [1] -0.5
> > >> cor(log(a), log(b), method="spearman", use="all.obs")
> > > [1] -0.5
> > >
> > >> sessionInfo()
> > > R version 2.6.1 (2007-11-26)
> > > i686-pc-linux-gnu
> > >
> > > locale:
> > >
> > LC_CTYPE=en_US;LC_NUMERIC=C;LC_TIME=en_US;LC_COLLATE=en_US;LC_MONETARY
> > >
> > =en_US;LC_MESSAGES=en_US;LC_PAPER=en_US;LC_NAME=C;LC_ADDRESS=C;LC_TELE
> > > PHONE=C;LC_MEASUREMENT=en_US;LC_IDENTIFICATION=C
> > >
> > > attached base packages:
> > > [1] stats     graphics  grDevices utils     datasets  methods   base
> > >>
> > >
> > > Thank you for your help.
> > >
> > > Best regards,
> > >
> > > Timur Shtatland
> > >
> > > ______________________________________________
> > > 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.
> > >
> > >
> >
>
>

	[[alternative HTML version deleted]]

