Llego un poco tarde a la fiesta, pero no pude evitar publicar un par de formas más de hacerlo. Ambos aprovechan las capacidades R para trabajar con intervalos en la línea real.
Si define sus puntos de corte y valores de la función en los vectores cuts
y vals
así:
cuts <- c(-Inf, -1.793, -1.304, -0.326, 0.625, 1.630, 2.119)
vals <- c( 0, 0.454, 0, 0.632, 0, 0.227, 0)
continuación, puede utilizar findInterval
para buscar de manera eficiente a los valores de x
en sus puntos de corte:
fx <- vals[findInterval(x, c(-Inf, cuts))]
Si esta función necesita hacer algo más elegante que simplemente buscar un valor constante, puede poner expresiones o funciones o lo que quiera en vals
, posiblemente usi ng a list
si lo desea.
alternativa, ya que esta función es una función escalonada, puede utilizar stepfun
:
f <- stepfun(cuts[-1], vals)
fx <- f(x)
A continuación, también se llega a utilizar los buenos métodos de trazado de stepfun
también.
Puede valer la pena aclarar que este ejemplo es una función de paso, una clase especial de funciones por partes. Para las funciones de paso, 'stepfun' (mencionado por @KenWIlliams) y' approxfun' ambos funcionan bien. 'approxfun' también acomoda funciones lineales por partes (pero no funciones por partes generales). – dzeltzer