R-lang throws the warning, the condition has length > 1 and only the first element will be used because if statement is not vectorized. In it’s place you need to use ifelse or you can use any() function.

Suppose you have a vector –

a <- c(1,2,3,0,0,4,5,0,0,1)

And you want to do an operation on it using if statement –

w<-function(a){
  if (a>0){
    a/sum(a)
  }
  else 1
}

What we are trying to achieve is updating the values of vector a to value / sum of all values, if the value is greater than 0 otherwise set it to 1. So, the above vector should return –

// sum(a) = 1+2+3+0+0+4+5+0+0+1 = 16
a <- c(1/16, 2/16, 3/16, 1, 1, 4/16, 5/16, 1, 1, 1/16)

But the code will return a warning message –

 Warning message:
 In if (a > 0) { :
 the condition has length > 1 and only the first element will be used

Solution

There are 2 ways of doing this – using any() or ifelse –

w <- function(a){
if (any(a>0)){
  a/sum(a)
}
  else 1
}
w <- function(a){
  ifelse(a>0,a/sum(a),1)
}

Β Β Β Β Tweet this to help others

Live Demo

Demo might not work in private window (incognito)

R

Tagged in:

,

Comments

About the Author

akamit

I am Akash Mittal, an overall computer scientist. If you want to guest post, need help in your projects, want to advertise, Feel free to contact me at [email protected]

View All Articles