Deedle - 具有初始值的Series上的递归映射

时间:2016-11-11 13:23:15

标签: recursion f# deedle

我正在尝试从相同类型的现有系列中创建一个新的时间系列(Series [DateTime,float]),其中新系列的地图是递归 - 例如:< / p>

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
)

所以,我认为诀窍是,如何允许函数访问系列中的“previous”值来递归地构建它?

编辑 - 已移至以下答案。

1 个答案:

答案 0 :(得分:3)

基于Fyodor的推荐 - 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”值,并在最后将其合并。