# [R] Simplify simple code

Don MacQueen macq at llnl.gov
Mon Apr 16 20:34:40 CEST 2007

```For one thing, get rid of the for() loop.
The following may or may not be faster, and may or may not use more
memory (an issue if x1 and x2 are long), but it's easier to read.

n <- length(x1)
y <- numeric(n)

tmp <-  x1>=5 & x1 <= 10 & x2 >= 5 & x2 <= 10
y[tmp] <- 0.631*x1[tmp]^0.55 * x2[tmp]^0.65

# and similarly for the other three conditions

I would put in a test at the beginning to make sure that x1 and x2
are the same length:
if (length(x1) != length(x2)) stop("Problem: x1 and x2 have
different lengths")

-Don

At 2:37 PM +0900 4/16/07, Dong-hyun Oh wrote:
>Dear expeRts,
>
>I would simplify following code.
>---------------------------------------------
>youtput <- function(x1, x2){
>    n <- length(x1)
>    y <- vector(mode="numeric", length=n)
>    for(i in 1:n){
>      if(x1[i] >=5 & x1[i] <= 10 & x2[i] >=5 & x2[i] <=10)
>        y[i] <- 0.631 * x1[i]^0.55 * x2[i]^0.65
>      if(x1[i] >=10 & x1[i] <= 15 & x2[i] >=5 & x2[i] <=10)
>        y[i] <- 0.794 * x1[i]^0.45 * x2[i]^0.65
>      if(x1[i] >=5 & x1[i] <= 10 & x2[i] >=10 & x2[i] <=15)
>        y[i] <- 1.259 * x1[i]^0.55 * x2[i]^0.35
>      if(x1[i] >=10 & x1[i] <= 15 & x2[i] >=10 & x2[i] <=15)
>        y[i] <- 1.585 * x1[i]^0.45 * x2[i]^0.35
>    }
>    y
>}
>----------------------------------------------
>Anyone can help me?
>
>Sincerely,
>
>===========================================
>Dong H. Oh
>
>Ph. D Candidate
>Techno-Economics and Policy Program
>College of Engineering, Seoul National University,
>Seoul, 151-050, Republic of Korea
>
>E-mail:doriaba2 at snu.ac.kr
>Mobile: +82-10-6877-2109
>Office : +82-2-880-9142
>Fax: +82-2-880-8389
>
>______________________________________________
>R-help at stat.math.ethz.ch mailing list
>https://stat.ethz.ch/mailman/listinfo/r-help
>and provide commented, minimal, self-contained, reproducible code.

--
--------------------------------------
Don MacQueen
Environmental Protection Department
Lawrence Livermore National Laboratory
Livermore, CA, USA

```