There isn't enough code or description to be completely sure of the problem, but here's a shot:
(ff[#] = {Sin, Cos, Exp}[[#]]) & /@ Range[3];
(aa[#] = N@#) & /@ Range[3];
(bb[#] = aa[#] + RandomReal[]) & /@ Range[3];
data = Table[Line[{{aa[x]}, {bb[x]}}] -> ff[x], {x, 3}];
myF[x_?NumericQ] :=
Replace[Nearest[data, x, {1, 0},
DistanceFunction -> (RegionDistance[#2, {#1}] &)], {{func_} :>
func[x], {} -> Undefined, _ -> "Can't happen (?)"}]
myF /@ Subdivide[1., 4., 25]
(*
{0.841471, 0.9001, Undefined, Undefined, Undefined, Undefined,
Undefined, Undefined, Undefined, -0.487482, -0.588501, -0.681056,
-0.763815, -0.835589, -0.895344, Undefined, Undefined, 20.9052,
23.5706, 26.5758, 29.9641, 33.7844, 38.0918, Undefined, Undefined,
Undefined}
*)
data
(*
{Line[{{1.}, {1.15606}}] -> Sin,
Line[{{2.}, {2.77624}}] -> Cos,
Line[{{3.}, {3.6764}}] -> Exp}
*)
Or this:
(ff[#] = {100. &, -#^2 &, Exp}[[#]]) & /@ Range[3];
(aa[#] = N@#^2) & /@ Range[3];
(bb[#] = aa[#] + RandomReal[{1, 3}]) & /@ Range[3];
data = Table[aa[x], {x, 3}];
nf = Nearest[data -> "Index"];
myF2[x_?NumericQ] := Replace[nf[x, 1],
{{k_} /; aa[k] < x <= bb[k] :> ff[k][x],
{k_} /; aa[k - 1] < x <= bb[k - 1] :> ff[k - 1][x],
{_} -> Undefined, _ -> "Can't happen (?)"}]
myF2 /@ Subdivide[1., 10., 20]
(*
{Undefined, 100., 100., 100., Undefined, Undefined, Undefined,
-17.2225, -21.16, -25.5025, -30.25, Undefined, Undefined, Undefined,
Undefined, Undefined, Undefined, Undefined, 8955.29, 14044.7, 22026.5}
*)