On May 23, 2016, at 10:59 AM, jlu...@ria.buffalo.edu wrote:
> 
> R users: 
> 
> Suppose I have a function that takes three numeric arguments x, y,  and z, 
> any of which may be scalars or vectors.
> Suppose further that the user takes one of the arguments, say y, as a 
> vector with the other two as scalars.
> Is there an existing R function that will promote the other two arguments 
> to vectors of the same size?
> 
> I know in most cases this is not a problem as the promotion is automatic. 
> I need this for a function I am writing
> and I don't want to write any additional code to do this if I can help it.
> 
> Joe

For a general overview of R's recycling approach, see:

  
https://cran.r-project.org/doc/manuals/r-release/R-intro.html#Vector-arithmetic

and:

  
https://cran.r-project.org/doc/manuals/r-release/R-intro.html#The-recycling-rule

The question is what type of error checking you want to embed in your function, 
if the lengths of each argument are not the same and that would be a problem. 
Do you want to presume that a user will pass arguments that fit your a priori 
expectation, or protect against the possibility that they do not?

What would you do if y is a vector of length 6, x is a vector of length 1 and z 
is a vector of length 8?

R's default rules would replicate 'x' 8 times (e.g. rep(x, 8)), while extending 
'y' by 2 (e.g. y <- y[c(1:6, 1:2)]), so that both have length(z).

You can use something along the lines of:

Max.Len <- max(length(x), length(y), length(z))
x <- rep(x, length.out = Max.Len)
y <- rep(y, length.out = Max.Len)
z <- rep(z, length.out = Max.Len)

which will recycle each as may be needed so that they have a common length.

Only you will know, given your function, if that might result in problems in 
whatever result your function is intended to generate.

Regards,

Marc Schwartz

______________________________________________
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to