[R] argument rationalization
Prof Brian Ripley
ripley at stats.ox.ac.uk
Mon Nov 15 10:07:36 CET 2004
I think you should implement recycling, ideally at C level.
But you could have
f <- function(x, y, z)
{
n <- max(length(x), length(y), length(z))
.C("something", as.double(rep(x, len=n)), as.double(rep(y, len=n)),
as.double(rep(z, len=n)), as.integer(n), ans)$ans
}
On Mon, 15 Nov 2004, Robin Hankin wrote:
>
> Hi
>
> I am writing a bunch of functions that take two, three or four
> arguments. These functions operate on vectors of the same length; but I
> want the function
> to behave sensibly if one or more arguments are scalars. "+" does this for
> two arguments:
>
>
> "+"(1:10,3) # interpreted as "+"(1:10,rep(3,10))
>
> But my functions can take more arguments. Say f() takes three:
>
> f(1:10,1:10,1:10) # default
> f(3,1:10,1:10) # interpret as f(rep(3,10),1:10,1:10)
> f(1:10,3,1:10) # interpret as f(1:10,rep(3,10),1:10)
> f(1:10,3,5) # interpret as f(1:10,rep(3,10),rep(5,10))
>
> and h() takes four:
>
> h(2,4,5,1:10) # interpret as h(rep(2,10),rep(4,10),rep(5,10),1:10)
> h(2,3,1:10,1) # interpret as h(rep(2,10),rep(3,10),1:10,rep(1:10)
> h(1:20,3,1:20,1) # interpret as h(1:20,rep(3,20),1:20,rep(1,20))
>
> I haven't got any that need five yet, but this may change in the future.
> How do I implement this desired behaviour nicely?
>
> (I pass the arguments to .C(), which is why I need this).
>
> --
> Robin Hankin
> Uncertainty Analyst
> Southampton Oceanography Centre
> SO14 3ZH
> tel +44(0)23-8059-7743
> initialDOTsurname at soc.soton.ac.uk (edit in obvious way; spam precaution)
>
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
>
>
--
Brian D. Ripley, ripley at stats.ox.ac.uk
Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/
University of Oxford, Tel: +44 1865 272861 (self)
1 South Parks Road, +44 1865 272866 (PA)
Oxford OX1 3TG, UK Fax: +44 1865 272595
More information about the R-help
mailing list