Jestem trochę spóźniony na imprezę, ale nie mogłem oprzeć się dodaniu kilku innych sposobów, aby to zrobić. Oba wykorzystują możliwości R do pracy z interwałami na prawdziwej linii.
Jeśli definiować swoje punkty cięte i wartości funkcji w wektorach cuts
i vals
tak:
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)
Następnie można użyć findInterval
sprawnie wyszukać wartości x
w swoim odcięcia:
fx <- vals[findInterval(x, c(-Inf, cuts))]
Jeśli ta funkcja wymagała bardziej wyszukanych rzeczy niż tylko wyszukiwanie stałej wartości, możesz wstawiać wyrażenia lub funkcje lub cokolwiek chcesz w vals
, ewentualnie usi ng a list
jeśli chcesz.
Alternatywnie, ponieważ ta funkcja jest funkcją krok, można użyć stepfun
:
f <- stepfun(cuts[-1], vals)
fx <- f(x)
Następnie można również uzyskać korzystania z ciekawych metod wykreślanie stepfun
też.
Warto wyjaśnić, że ten przykład jest funkcją stopniową, specjalną klasą złożonych funkcji. W przypadku funkcji krokowych, 'stepfun' (wspomniany przez @KenWIlliams) i' approxfun' oba działają dobrze. 'approxfun' również obsługuje funkcje liniowo-liniowe (ale nie ogólne funkcje w postaci kawałków). – dzeltzer