如何使用RProvider在F#中编写求和函数?

时间:2013-10-01 17:49:18

标签: r f# type-providers

#r "RProvider.dll"
open RProvider
open RProvider.``base``

let add (x: float) (y: float) = 
    let sum = R.sum(x,y)
    sum.Value

VS给我错误“字段,构造函数或成员'值'未定义”

我也尝试将矢量传递给R.sum

来自现有的小文档(https://github.com/BlueMountainCapital/FSharpRProvider/wiki/How-To)我无法想象该怎么做

1 个答案:

答案 0 :(得分:1)

使用R.sum函数似乎有点难看,因为它需要可变数量的参数并对所有参数求和(因此R类型提供程序无法推断它所期望的参数)。

要获得结果,您需要一些扩展方法:

open RDotNet 

调用这样的函数有两个选项 - 你可以给它一个参数(不指定它们的名字),这对R.sum来说效果很好:

// You can pass parameters as an explicit array
R.sum([| 2.0; 3.0 |]).AsNumeric() |> Seq.head
// Or you can use the fact that the function takes 'params' array
R.sum(1.0, 2.0).AsNumeric() |> Seq.head

如果要指定参数的名称(这里不是真的需要,但对其他函数有用),那么你可以为R函数构建一个表示“命名参数”的结构并调用它:

let nums = namedParams ["x", 2.0; "y", 3.0]
R.sum(nums).AsNumeric() |> Seq.head

请注意,对于可以静态推断参数的函数,情况更好。 E.g:

R.mean(x=[1;2;3])