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)
}``````

## Live Demo

Demo might not work in private window (incognito)

Tagged in:

,