Deedle - рекурсивное отображение на серии с начальным значением
Я пытаюсь создать новый временной ряд (Series[DateTime,float]) из существующего одного и того же типа, где карта новой серии является рекурсивной, например:
NewSeries_T = NewSeries_T-1 + constant * OldSeries_T;
У меня есть "NewSeries_0 = 1", в качестве значения инициализации для новой серии.
Я пытаюсь написать функцию Series.map, которая сделает эту работу - я дошел до следующего нерабочего кода, но не могу понять рекурсивную часть:
let rec newSeries = existingSeries |> Series.map (fun k v ->
match k.Equals(initDate) with
| true -> 1
| false -> newSeries.LastValue() + constant * v
)
Итак, я думаю, дело в том, как разрешить функции доступ к "предыдущему" значению в серии, чтобы рекурсивно построить это?
Редактировать - перемещено, чтобы ответить ниже.
1 ответ
Основываясь на рекомендации Федора, Series.scanValues делает именно то, что мне нужно:
let initalEntry = Series([initDate], [init])
let newSeries=
existingSeries
|> Series.filter (fun k v -> k.Equals(initDate) = false)
|> Series.scanValues (fun n x-> lambda * n + (1.0 - lambda) * x ) init
newSeries.Merge(initalEntry)
Я забрал первое значение, так как хочу, чтобы он возвращал значение init в начале серии, и слил это обратно в конце.