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.