Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Multiple conditional statements within lapply function to avoid looping

I would like to write a function with multiple conditions within lapply. I know how to define multiple conditions using a for loop. However I would like to avoid looping this time.

For instance:

let’s assume there is a vector (vctr) with numbers from -3 to 5:

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

set.seed(10)
vctr <- c(sample(-3:5), rep(0,3), sample(-3:5), 0)

and let’s define two conditions:

  • condition_1 <- if the number is equal to 0 -> add 1 to the initial
    value
  • condition_2 <- if the number is not equal to 0 -> leave it be

And this works perfectly fine:

test_list <- lapply(1:length(vctr), function(x) if(vctr[x]==0) vctr[x] +1 else vctr[x])

However, what about the situation in which there would be multiple conditions? For instance:

  • condition_1 <- if the number is equal to 0 -> add 1
  • condition_2 <- if the number is negative -> replace it with absolute value
  • condition_3 <- if the number is greater than 0 but lower than 3 ->
    add 2 to the initial value
  • condition_4 <- if the number is equal or greater than 3 -> leave it be

I tried the following with conditions 1, 2 and "leave it be" however this syntax does not work.

test_list2 <- lapply(1:length(vctr), function(x) if(vctr[x]==0) vctr[x] +1 if else(vctr[x]<0) abs(vctr[x]) else vctr[x])

EDIT: I would like to ask for non-dplyr solutions.

>Solution :

you can replace sapply with lapply if you want a list output

sapply(vctr, function(x) {
  if (x == 0) y <- x + 1
  if (x < 0) y <- abs(x)
  if (x > 0 & x < 3) y <- x + 2
  if (x >= 3) y <- x
  return(y)
})

[1] 5 2 1 4 1 3 3 3 4 1 1 1 3 2 4 3 1 5 1 3 4 1
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading