[Rd] [R] unvectorized option for outer()
Thomas Lumley
tlumley at u.washington.edu
Mon Oct 31 20:33:59 CET 2005
On Mon, 31 Oct 2005, Liaw, Andy wrote:
>> From: Thomas Lumley
>>
>> On Sun, 30 Oct 2005, Jonathan Rougier wrote:
>>
>>> I'm not sure about this. Perhaps I am a dinosaur, but my feeling is
>>> that if people are writing functions in R that might be subject to
>>> simple operations like outer products, then they ought to be writing
>>> vectorised functions!
>>
>> I would agree. How about an oapply() function that does
>> multiway (rather
>> than just two-way) outer products. Basing the name on "apply" would
>> emphasize the similarity to other flexible, not particularly
>> optimized
>> second-order functions.
>>
>> -thomas
>
> I'll toss in my $0.02: The following is my attempt at creating a "general
> outer" that works with more than two arguments.
>
> gouter <- function (x, FUN, ...) {
> xgrid <- as.list(do.call("expand.grid", x))
> names(xgrid) <- NULL
> array(do.call(deparse(substitute(FUN)), c(xgrid, list(...))),
> dim = sapply(x, length), dimnames = x)
> }
>
Yes, that's the sort of thing I had in mind. The name "gouter" isn't
exactly to my taste -- the point was that outer() is the fast but
restricted function and that the general but slow function should have a
different name (eg xapply or oapply).
-thomas
More information about the R-devel
mailing list