Как написать функцию суммирования на F# с помощью RProvider?

#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) не могу понять что делать


person kevinykuo    schedule 01.10.2013    source источник
comment
Здравствуйте! Ознакомьтесь с документацией в разделе Доступ к результатам.   -  person Ricardo Saporta    schedule 01.10.2013


Ответы (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

Обратите внимание, что ситуация лучше для функций, параметры которых можно вывести статически. Например.:

R.mean(x=[1;2;3])
person Tomas Petricek    schedule 01.10.2013