From mtmorgan at fhcrc.org  Mon Jan  9 19:44:58 2006
From: mtmorgan at fhcrc.org (Martin Morgan)
Date: Mon, 09 Jan 2006 10:44:58 -0800
Subject: [Rd] prod(numeric(0)) surprise
In-Reply-To: <43C2ACD7.3050902@stats.uwo.ca> (Duncan Murdoch's message of
	"Mon, 09 Jan 2006 13:35:03 -0500")
References: <39B6DDB9048D0F4DAD42CB26AAFF0AFAFED6D2@usctmx1106.merck.com>
	<43C2ACD7.3050902@stats.uwo.ca>
Message-ID: <6phek3hz1ed.fsf@gopher3.fhcrc.org>

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

> On 1/9/2006 1:27 PM, Liaw, Andy wrote:
>> If you haven't seen this in your math courses, perhaps this would help:
>> http://en.wikipedia.org/wiki/Empty_set
>>
>
> This is what is so great about Wikipedia:  it gives certainty where
> I'd only call it a fairly standard convention.  ;-)
>
> Duncan Murdoch

Yes, thanks for the refresher and sorry for the noise. Martin

>> which says, in part:
>> Operations on the empty set
>> Operations performed on the empty set (as a set of things to be
>> operated
>> upon) can also be confusing. (Such operations are nullary operations.) For
>> example, the sum of the elements of the empty set is zero, but the product
>> of the elements of the empty set is one (see empty product). This may seem
>> odd, since there are no elements of the empty set, so how could it matter
>> whether they are added or multiplied (since "they" do not exist)?
>> Ultimately, the results of these operations say more about the operation in
>> question than about the empty set. For instance, notice that zero is the
>> identity element for addition, and one is the identity element for
>> multiplication.
>> Andy
>> From: Martin Morgan
>>> I guess I have to say yes, I'd exepct
>>> x <- 1:10
>>> sum(x[x>10]) ==> numeric(0)
>>> this would be reinforced by recongnizing that numeric(0) is not
>>> zero,
>>> but nothing. I guess the summation over an empty set is an empty set,
>>> rather than a set containing the number 0. Certainly these
>>> exp(x[x>10]) ==> numeric(0)
>>> numeric(0) + 1 ==> numeric(0)
>>> would give me pause.
>>> Gabor Grothendieck <ggrothendieck at gmail.com> writes:
>>> > The way to think about it is:
>>> >
>>> >    prod(rep(x,n)) == x^n
>>> >
>>> > and that works for n=0 too.
>>> Hmm, Not sure what to put in for x and n? do you mean x ==
>>> numeric(0),
>>> n == 0 (0 copies of an empty set), x == ANY n == numeric(0) (an empty
>>> set of ANYthing), x == numeric(0), n == numeric(0) ? For all of these,
>>> x^n evaluates to numeric(0).
>>> Martin (Morgan)
>>> Duncan Murdoch <murdoch at stats.uwo.ca> writes:
>>> > On 1/9/2006 12:40 PM, Martin Morgan wrote:
>>> >> I'm a little confused. I understand that numeric(0) means an empty
>>> >> numeric vector, not the number 0 expressed as numeric. As it is
>>> now,
>>> >> prod(numeric(0)) generates something -- a vector of length 1
>>> >> containing the number 1 -- from nothing. I would have expected
>>> >> prod(numeric(0)) ==> numeric(0)
>>> >> this is consistent with
>>> >> numeric(0) ==> numeric(0)
>>> >> numeric(0) * 1 ==> numeric(0)
>>> >> cumprod(numeric(0)) ==> numeric(0)
>>> >> and, because concatenation occus before function evaluation,
>>> >> prod(c(numeric(0),1)) ==> prod( c(1) ) ==> 1
>>> >> I would expect sum() to behave the same way, e.g., sum(numeric(0))
>>> >> ==>
>>> >> numeric(0). From below,
>>> >>
>>> >
>>> > I think the code below works as I'd expect.  Would you really
>>> like the
>>> > last answer to be numeric(0)?
>>> >
>>> >  > x <- 1:10
>>> >  > sum(x)
>>> > [1] 55
>>> >  > sum(x[x>5])
>>> > [1] 40
>>> >  > sum(x[x>10])
>>> > [1] 0
>>> >
>>> > Duncan Murdoch
>>> >
>>> >>>     >>>> consider exp(sum(log(numeric(0)))) ... ?)
>>> >>>     >>     >> That's a fairly standard mathematical convention,
>>> >>> which
>>> >>>     >> is presumably why sum and prod work that way.
>>> >>>     >>     >> Duncan Murdoch
>>> >> I would have expected numeric(0) as the result (numeric(0) is the
>>> >> result from log(numeric(0)), etc).
>>> >> Martin (Morgan)
>>> >> Martin Maechler <maechler at stat.math.ethz.ch> writes:
>>> >>
>>> >>>>>>>> "Ben" == Ben Bolker <bolker at zoo.ufl.edu>
>>> >>>>>>>>     on Sun, 08 Jan 2006 21:40:05 -0500 writes:
>>> >>>
>>> >>>     Ben> Duncan Murdoch wrote:
>>> >>>     >> On 1/8/2006 9:24 PM, Ben Bolker wrote:
>>> >>>     >>     >>> It surprised me that prod(numeric(0)) is 1.  I
>>> guess
>>> >>> if
>>> >>>     >>> you say (operation(nothing) == identity element) this
>>> >>>     >>> makes sense, but ??
>>> >>>     >>     >>     >> What value were you expecting, or were you
>>> >>> expecting an
>>> >>>     >> error?  I can't think how any other value could be
>>> >>>     >> justified, and throwing an error would make a lot of
>>> >>>     >> formulas more complicated.
>>> >>>     >>     >>>
>>> >>>     >>     >>>> consider exp(sum(log(numeric(0)))) ... ?)
>>> >>>     >>     >> That's a fairly standard mathematical convention,
>>> >>> which
>>> >>>     >> is presumably why sum and prod work that way.
>>> >>>     >>     >> Duncan Murdoch
>>> >>>
>>> >>>     Ben>    OK.  I guess I was expecting NaN/NA (as opposed to
>>> >>>     Ben> an error), but I take the "this makes everything else
>>> >>>     Ben> more complicated" point.  Should this be documented or
>>> >>>     Ben> is it just too obvious ... ?  (Funny -- I'm willing to
>>> >>>     Ben> take gamma(1)==1 without any argument or suggestion
>>> >>>     Ben> that it should be documented ...)
>>> >>>
>>> >>> see?  so it looks to me as if you have finally convinced
>>> >>> yourself that '1' is the most reasonable result.. ;-)
>>> >>>
>>> >>> Anyway, I've added a sentence to help(prod)  {which matches
>>> >>> the sentence in help(sum), BTW}.
>>> >>>
>>> >>> Martin
>>> >>>
>>> >>> ______________________________________________
>>> >>> R-devel at r-project.org mailing list
>>> >>> https://stat.ethz.ch/mailman/listinfo/r-devel
>>> ______________________________________________
>>> R-devel at r-project.org mailing list
>>> https://stat.ethz.ch/mailman/listinfo/r-devel
>>>
>> ------------------------------------------------------------------------------
>> Notice:  This e-mail message, together with any attachments, contains information of Merck & Co., Inc. (One Merck Drive, Whitehouse Station, New Jersey, USA 08889), and/or its affiliates (which may be known outside the United States as Merck Frosst, Merck Sharp & Dohme or MSD and in Japan, as Banyu) that may be confidential, proprietary copyrighted and/or legally privileged. It is intended solely for the use of the individual or entity named on this message.  If you are not the intended recipient, and have received this message in error, please notify us immediately by reply e-mail and then delete it from your system.
>> ------------------------------------------------------------------------------



[Rd] prod(numeric(0)) surprise
Martin Morgan