>>>>> 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 ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel