Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Vectorized IF statement in R?

x <- seq(0.1,10,0.1) y <- if (x < 5) 1 else 2 

I would want the if to operate on every single case instead of operating on the whole vector. What do I have to change?

like image 830
Christian Avatar asked Oct 28 '10 11:10

Christian


People also ask

Is Ifelse vectorized R?

R ifelse() Function In R, the ifelse() function is a shorthand vectorized alternative to the standard if...else statement. Most of the functions in R take a vector as input and return a vectorized output.

How do I write an if statement with multiple conditions in R?

Multiple Conditions To join two or more conditions into a single if statement, use logical operators viz. && (and), || (or) and ! (not). && (and) expression is True, if all the conditions are true.

How do you find a condition in a vector in R?

%in% operator can be used in R Programming Language, to check for the presence of an element inside a vector. It returns a boolean output, evaluating to TRUE if the element is present, else returns false.

What does Ifelse () do in R?

The ifelse function is used to assign one object or another depending on whether the first argument, test, is TRUE or FALSE. It even works as one would hope when test is a vector. test – A logical expression, which may be a vector.


2 Answers

x <- seq(0.1,10,0.1)  > x   [1]  0.1  0.2  0.3  0.4  0.5  0.6  0.7  0.8  0.9  1.0  1.1  1.2  1.3  1.4  1.5  [16]  1.6  1.7  1.8  1.9  2.0  2.1  2.2  2.3  2.4  2.5  2.6  2.7  2.8  2.9  3.0  [31]  3.1  3.2  3.3  3.4  3.5  3.6  3.7  3.8  3.9  4.0  4.1  4.2  4.3  4.4  4.5  [46]  4.6  4.7  4.8  4.9  5.0  5.1  5.2  5.3  5.4  5.5  5.6  5.7  5.8  5.9  6.0  [61]  6.1  6.2  6.3  6.4  6.5  6.6  6.7  6.8  6.9  7.0  7.1  7.2  7.3  7.4  7.5  [76]  7.6  7.7  7.8  7.9  8.0  8.1  8.2  8.3  8.4  8.5  8.6  8.7  8.8  8.9  9.0  [91]  9.1  9.2  9.3  9.4  9.5  9.6  9.7  9.8  9.9 10.0  > ifelse(x < 5, 1, 2)   [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1  [38] 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2  [75] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 
like image 173
Roman Luštrik Avatar answered Sep 17 '22 13:09

Roman Luštrik


y <- if (x < 5) 1 else 2 does not operate on the whole vector (the warning you receive tells you only the first element of the condition will be used). You want ifelse:

y <- ifelse(x < 5, 1, 2) 

ifelse operates on the whole logical vector, element-by-element. if only accepts one logical value. See ?"if" and ?ifelse

like image 20
Joshua Ulrich Avatar answered Sep 21 '22 13:09

Joshua Ulrich