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 в начале серии, и слил это обратно в конце.

Другие вопросы по тегам