Dies ist ein weiteres Follow-up zu Working with missing values in Deedle Time Series in F# (2)Arbeiten mit fehlenden Werten in Deedle Time Series in F # (3)
ich diese Funktion Serie map2 geschrieben haben, einen fehlenden Wert zurückkehrt, wenn entweder Eingang fehlt.
let map2series (f:'T1->'T2->'R)(series1:Series<'K,'T1 opt>)(series2:Series<'K,'T2 opt>):Series<'K,'R opt>=
let S = series1.Zip(series2,JoinKind.Outer) //Series<'K,('T1 opt opt * 'T2 opt opt)>
S |> Series.mapValues (fun (a,b) -> match (a,b) with
| (OptionalValue.Present(a'), OptionalValue.Present(b')) -> OptionalValue.map2 f a' b'
| _ -> OptionalValue.Missing)
seit Series<'K,'T opt>
erscheinen natürlich in Deedle nach .Zip
oder .Join
Methoden.
Wie jedoch zuvor gesehen, Series<'K,'V>
bereits unterstützt fehlende Werte, so würde Ich mag die Funktion über die neu zu schreiben, im Grunde das gleiche tun würde, außer dass es dauert Series<'K,'V>
als Eingänge
let map2series1 (f:'T1->'T2->'R)(series1:Series<'K,'T1>)(series2:Series<'K,'T2>):Series<'K,'R>=
let S = series1.Zip(series2,JoinKind.Outer) //Series<'K,('T1 opt * 'T2 opt)>
S |> Series.mapValues (fun (a,b) -> match (a,b) with
| (OptionalValue.Present(a'), OptionalValue.Present(b')) -> f a' b'
| _ -> None)
Doch diese funktioniert nicht, ich habe nicht die richtige Syntax in der zweiten Union Fall, wenn ein Wert fehlt ...
grundsätzlich anstelle der letzten None
, ich muss einen Wert zuweisen, der <missing>
entspricht, aber ich kann nicht finden es.
Ich sah auch so etwas wie Option.bind OptionalValue.asOption OptionalValue.Missing
aber den richtigen Ausdruck nicht finden können