From m@echler @ending from @t@t@m@th@ethz@ch  Mon Jul 30 14:38:36 2018
From: m@echler @ending from @t@t@m@th@ethz@ch (Martin Maechler)
Date: Mon, 30 Jul 2018 14:38:36 +0200
Subject: [Rd] apply with zero-row matrix
In-Reply-To: <CAARY7kgmMCbMtigw4i6NZMVMfv-VFdg0VQY1qKECPyAaJ=kbYA@mail.gmail.com>
References: <CAARY7khVXzxutThhKcq+ZftTE8-66eH-B-82xs-8TFyTTmGrkw@mail.gmail.com>
 <CAARY7kjL=buR9GE9rP8Y64D_WTdrFunfTMUXD2mw8P4gMsNrTQ@mail.gmail.com>
 <23390.49459.112386.395212@stat.math.ethz.ch>
 <CAARY7kgmMCbMtigw4i6NZMVMfv-VFdg0VQY1qKECPyAaJ=kbYA@mail.gmail.com>
Message-ID: <23391.1740.722692.223110@stat.math.ethz.ch>

>>>>> David Hugh-Jones 
>>>>>     on Mon, 30 Jul 2018 10:12:24 +0100 writes:

    > Hi Martin, Fair enough for R functions in general. But the
    > behaviour of apply violates the expectation that apply(m,
    > 1, fun) calls fun n times when m has n rows.  That seems
    > pretty basic.

Well, that expectation is obviously wrong ;-)  see below

    > Also, I understand from your argument why it makes sense
    > to call apply and return a special result (presumably
    > NULL) for an empty argument; but why should apply call fun?

    > Cheers David

The reason is seen e.g. in

    > apply(matrix(,0,3), 2, quantile)
	 [,1] [,2] [,3]
    0%     NA   NA   NA
    25%    NA   NA   NA
    50%    NA   NA   NA
    75%    NA   NA   NA
    100%   NA   NA   NA
    > 

and that is documented (+/-) in the first paragraph of the
'Value:' section of help(apply) :

 > Value:
 > 
 >      If each call to ?FUN? returns a vector of length ?n?, then ?apply?
 >      returns an array of dimension ?c(n, dim(X)[MARGIN])? if ?n > 1?.
 >      If ?n? equals ?1?, ?apply? returns a vector if ?MARGIN? has length
 >      1 and an array of dimension ?dim(X)[MARGIN]? otherwise.  If ?n? is
 >      ?0?, the result has length 0 but not necessarily the ?correct?
 >      dimension.


To determine 'n', the function *is* called once even when
length(X) ==  0

It may indeed be would helpful to add this explicitly to the
help page  ( <R>/src/library/base/man/apply.Rd ).
Can you propose a wording (in *.Rd if possible) ?

With regards,
Martin



[Rd] apply with zero-row matrix
Martin Maechler