[Rd] prod(numeric(0)) surprise

Tony Plate tplate at acm.org
Mon Jan 9 23:03:33 CET 2006


Since the virtue and reliability of Wikis was brought up, I created a R 
Wiki page for this at 
http://www.sciviews.org/_rgui/wiki/doku.php?id=beginners:surprises:emptysetfuncs
:-)

Anyone: please correct errors and improve it!

Tony Plate

Duncan Murdoch wrote:
> 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
> 
> 
> 
>>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 attachment...{{dropped}}
> 
> 
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>



More information about the R-devel mailing list