[Rd] prod(numeric(0)) surprise
Duncan Murdoch
murdoch at stats.uwo.ca
Mon Jan 9 18:45:45 CET 2006
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
More information about the R-devel
mailing list