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