Por questões de desempenho é interessante que se evite aplicar a mestra instrução repetidas vezes, como por exemplo x>2. O resultado pode ser guardado e depois apenas consultado. Da mesma forma, se você tem o vetor lógico de x>2 basta invetê-lo para ter o de x<=2 uma vez que x>2 é igual à !(x<=2). Segue a adaptação que fiz do código do Jakson.

fr <- function(x){
    i <- x< -3
    j <- x> 2
    y <- 3*x
    y[i] <- 0
    y[j] <- 1
    y
}

fr(x)
curve(fr, -4, 6)

À disposição.
Walmes.