[Rd] apply with zero-row matrix
Martin Maechler
m@echler @ending from @t@t@m@th@ethz@ch
Mon Jul 30 14:38:36 CEST 2018
>>>>> 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
More information about the R-devel
mailing list