Tôi hơi muộn với bữa tiệc, nhưng tôi không thể cưỡng lại việc đăng thêm một vài cách để làm điều này. Cả hai đều tận dụng khả năng của R để làm việc với các khoảng thời gian trên dòng thực.
Nếu bạn xác định điểm cắt của bạn và các giá trị chức năng trong các vectơ cuts
và vals
như vậy:
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)
Sau đó, bạn có thể sử dụng findInterval
để hiệu quả tìm kiếm các giá trị của x
trong cutpoints của bạn:
fx <- vals[findInterval(x, c(-Inf, cuts))]
Nếu chức năng này cần thiết để làm những thứ huyền ảo hơn là chỉ tìm kiếm một giá trị không đổi, bạn có thể đặt các biểu thức hoặc chức năng hoặc bất cứ điều gì bạn muốn trong vals
, có thể là usi ng a list
nếu bạn muốn.
Ngoài ra, kể từ khi chức năng này là một chức năng bước, bạn có thể sử dụng stepfun
:
f <- stepfun(cuts[-1], vals)
fx <- f(x)
Sau đó, bạn cũng nhận được để sử dụng các phương pháp âm mưu tốt đẹp của stepfun
quá.
Có thể đáng làm rõ rằng ví dụ này là một hàm bước, một lớp đặc biệt của các chức năng tham chiếu. Đối với các hàm bước, 'stepfun' (được đề cập bởi @KenWIlliams) và' approxfun' đều hoạt động tốt. 'approxfun' cũng chứa các hàm số piecewise-linear (nhưng không chứa hàm piecewise chung). – dzeltzer