通过序号<;浮动期权>;从F#到R提供者

通过序号<;浮动期权>;从F#到R提供者,r,f#,R,F#,我希望能够将一系列的选项float传递给F#中的RProvider。如果我有一个带有Some float和None的浮点序列,我如何使用R提供程序将None值输入R?我本以为Nones等同于R中的NA值,但我无法将seq传递给R 例如,与 开放系统 开放RDotNet 开放式打印机 打开RProvider.graphics 打开RProvider.stats 设optData4= seq[约10.0;约9.0;约8.0;无;约6.0; 一些5.0;一些5.0;无;一些4.0;一些2.0; 无]

我希望能够将一系列的
选项float
传递给
F#
中的RProvider。如果我有一个带有
Some float
None
的浮点序列,我如何使用
R提供程序将
None
值输入
R
?我本以为
None
s等同于
R
中的
NA
值,但我无法将
seq
传递给R

例如,与

开放系统
开放RDotNet
开放式打印机
打开RProvider.graphics
打开RProvider.stats
设optData4=
seq[约10.0;约9.0;约8.0;无;约6.0;
一些5.0;一些5.0;无;一些4.0;一些2.0;
无]
设testData4=
命名参数[
“注册价格”,optData4;]
|>R.数据帧
我得到一个多行错误:

System.Exception:没有为类型Microsoft.FSharp.Collections.FSharpList`1[[Microsoft.FSharp.Core.FSharpOption`1[[System.Double,mscorlib,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089]、FSharp.Core,Version=4.4.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a]]或其任何基本类型注册的转换器
>在RProvider.RInteropInternal。convertToR@164.Invoke(字符串消息)在C:\Tomas\Public\bmc\FSharp.RProvider\src\RProvider\RInterop.fs中:第164行
在C:\Tomas\Public\bmc\FSharp.RProvider\src\RProvider\rinterp.fs:274行中的RProvider.rinternal.REngine.SetValue(REngine this,Object value,FSharpOption`1 symbolName)处
在C:\Tomas\Public\bmc\FSharp.RProvider\src\RProvider\RInterop.fs中的RProvider.rinterpinal.toR(对象值)处:第287行
在RProvider.RInterop。passArg@447(列出'1个临时符号,对象参数)在C:\Tomas\Public\bmc\FSharp.RProvider\src\RProvider\RInterop.fs中:第461行
在RProvider.RInterop。argList@468-1.C:\Tomas\Public\bmc\FSharp.RProvider\src\RProvider\RInterop.fs中的GenerateNext(IEnumerable`1&next):第469行
在Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1.MoveNextImpl()中
在Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1.System-Collections-IEnumerator-MoveNext()中
位于System.Collections.Generic.List`1..ctor(IEnumerable`1集合)
在Microsoft.FSharp.Collections.SeqModule.ToArray[T](IEnumerable`1来源)
在C:\Tomas\Public\bmc\FSharp.RProvider\src\RProvider\RInterop.fs中的RProvider.RInterop.callFunc(字符串packageName,字符串funcName,IEnumerable`1 argsByName,对象[]varArgs)处:第466行
位于C:\Users\sranney\repositories\carolina\u-refit\u-bits\refit\u-bits\RDemo.fs中的.FSI\u 0012.main@():第102行
由于错误而停止
我可以将任何内容传递给
r提供者的唯一方法是使用

让optData4=
seq[约10.0;约9.0;约8.0;无;约6.0;
一些5.0;一些5.0;无;一些4.0;一些2.0;
无]
|>Seq.chooseid
设testData4=
命名参数[
“注册价格”,optData4;]
|>R.数据帧
但这否定了无选项的目的(我本以为这与
R
s
NA
值相当)


如何将一系列值传递给
R提供者
,其中一些值在
F#
中是
None
,在
R
中应该是
NA

您可以使用dedle和null值执行此操作:

let toNullable =
       function
       | None -> Nullable()
       | Some x -> Nullable(x)

let optData4 = 
    seq [Some 10.0; Some 9.0; Some 8.0; None; Some 6.0; 
        Some 5.0; Some 5.0; None; Some 4.0; Some 2.0; 
        None] 
    |> Seq.map(toNullable)

let series = Series.ofNullables(optData4)

let testData4 = 
    namedParams [
        "regPrice", series;]
    |> R.data_frame

您可以使用Deedle和null值执行此操作:

let toNullable =
       function
       | None -> Nullable()
       | Some x -> Nullable(x)

let optData4 = 
    seq [Some 10.0; Some 9.0; Some 8.0; None; Some 6.0; 
        Some 5.0; Some 5.0; None; Some 4.0; Some 2.0; 
        None] 
    |> Seq.map(toNullable)

let series = Series.ofNullables(optData4)

let testData4 = 
    namedParams [
        "regPrice", series;]
    |> R.data_frame

我认为您应该能够做到这一点,只需将
None
值替换为
nan
(这并不完全正确,因为在R
NA
nan
中是不同的,但是对于F#中的浮点,无法表示两个不同的非值):


我没有对此进行测试,但我认为这是我们在Deedle内部所做的。

我认为您应该能够做到这一点,只需将
None
值替换为
nan
(这并不完全正确,因为在R
NA
NaN
中是不同的,但是对于F#中的浮点,无法表示两个不同的非值):


我没有测试过这一点,但我认为这是我们在Deedle内部所做的。

我完全没有F#知识,但在R
NA
中,NA实际上是一个超类,它包含了特定的NA-values-for-each-mode-other-non-logical然后你可能需要返回
NA#u real_uu
我完全没有F#知识,但在R
NA
中,它实际上是一个超类,包含了特定的NA-values-for-each-mode-not-logical然后你可能需要返回
NA|u real\uuuu
工作得很好。我使用了一个简单的函数来转换为值/nana:
让toNan x=match x与| Some x->x | None->nan
匹配,并将所有内容传递给
R
,否则我会这样做。工作得很好。我使用了一个简单的函数来转换为值/nana:
>让toNan x=match x与| Some x->x | None->nan
匹配,并像我那样将所有内容传递给
R
选项。Tonulable
内置于F#4.0及更高版本,因此无需定义自己的版本。
选项。Tonulable
内置于F#4.0及更高版本,因此无需定义自己的版本离子。