Sono un po 'in ritardo alla festa, ma non ho potuto resistere la pubblicazione di un altro paio di modi per farlo. Entrambi sfruttano le capacità R per lavorare con intervalli sulla linea reale.
Se si definiscono i punti di taglio e valori della funzione nei vettori cuts
e vals
in questo modo:
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)
Quindi è possibile utilizzare findInterval
per cercare in modo efficiente i valori di x
nei vostri punti di divisione:
fx <- vals[findInterval(x, c(-Inf, cuts))]
Se questa funzione è necessaria per creare cose più divertenti di un semplice valore costante, è possibile inserire espressioni, funzioni o qualsiasi cosa in vals
, eventualmente utilizzare ng a list
se vuoi.
In alternativa, dal momento che questa funzione è una funzione di passo, è possibile utilizzare stepfun
:
f <- stepfun(cuts[-1], vals)
fx <- f(x)
Poi è anche arrivare a utilizzare i metodi di plottaggio belle di stepfun
troppo.
fonte
2012-10-03 22:18:47
Potrebbe essere utile chiarire che questo esempio è una funzione di passaggio, una classe speciale di funzioni a tratti. Per le funzioni di passaggio, 'stepfun' (citato da @KenWIlliams) e' approxfun' funzionano entrambi bene. 'approxfun' supporta anche le funzioni lineari (ma non le funzioni a tratti in generale). – dzeltzer