In this tutorial we are going to code the following function in R:

\(f(x) =

\begin{cases}

-x, & \text{if $x < -1$} \\

x^2, & \text{if $x \geq -1$}

\end{cases}\)

And produce the following plot:

## Coding the piecewise function f(x) in R

### Using if else statements

# write the piecewise function with if else statements f = function(x) { if (x < -1) { -x } else { x^2 } }

While this code is easy to read and understand, it does not support vector inputs.

For example:

x = -5:5 print(f(x))

**Output:**

[1] 5 4 3 2 1 0 -1 -2 -3 -4 -5 Warning message: In if (x < -1) { : the condition has length > 1 and only the first element will be used

Which is not what we want.

One solution is to use a *for loop* to pass the elements of x one by one, or instead, we can vectorize *f(x)* by using the following code:

# vectorizing f(x) f = Vectorize(f) # testing the new version of f(x) x = -5:5 print(f(x))

**Output:**

[1] 5 4 3 2 1 0 1 4 9 16 25

### Another way to code f(x)

We can bypass the if-else statements, and code *f(x)* in one line:

# writing f(x) in compact form f = function(x) { (x < -1) * (-x) + (x >= -1) * (x^2) } x = -5:5 print(f(x)) # outputs: 5 4 3 2 1 0 1 4 9 16 25

This code takes advantage of the fact that, in R:

- TRUE == 1, and
- FALSE == 0

So, when x < -1, *f(x)* will be: 1 * (-x) + 0 * (x^2).

And when x >= -1, *f(x)* will be: 0 * (-x) + 1 * (x^2).

Note: By using this form, there is no need to vectorize *f(x)*.

## Plotting the piecewise function f(x)

# plot piecewise function x = seq(-5, 5, by = 0.1) # so, x = {-5, -4.9, -4.8, ..., 4.8, 4.9, 5} plot(x, f(x), type = 'l', ylim = c(0,10), col = 'blue') abline(v = 0, h = 0) # plotting the x and y axes abline(v = -1, col = 'red') # plotting the line x = -1 # plot annotation text(x = -1, y = 8, labels = "x = -1", pos = 2, col = 'red') text(x = 3, y = f(3), labels = "f(x)", pos = 4, col = 'blue')

**Output:**