如何在F#中使用用户创建的R函数?

时间:2015-03-16 15:19:14

标签: r f#

我有自己的R函数,我想在F#中使用。我该怎么做?

open RProvider
open RDotNet

let f1 = R.eval(R.parse(text="function(x) x + 1")).AsFunction()

// I expect the following line to give me 5 but it doesn't work
f1([|4|])

2 个答案:

答案 0 :(得分:0)

为了调用该函数,您必须使用类型提供程序将值传递给R.然后,使用R侧的传入数据调用该函数,最后将结果返回到F#:

let res = R.sapply(R.c(4),f1).AsInteger().[0]

此产品有以下输出

  

val f1:功能

     

val res:int = 5

您可以在http://bluemountaincapital.github.io/FSharpRProvider/passing-data.html

上找到更多信息

特别是,统计数据演练显示了来回传递技术的扩展示例,包括data.frames:http://bluemountaincapital.github.io/FSharpRProvider/Statistics-QuickStart.html

答案 1 :(得分:0)

正如托马斯·贾斯库拉(Thomas Jaskula)所回答的那样,正确的技巧是转到R并在那边进行评估。

这是另一个不依赖于将函数赋值给F#变量的例子:

另一个例子:

R.assign("y",[|1;2;3|])
let z = R.eval(R.parse(text="
    f2 <- function(x) x + 2
    f2(y)")).AsInteger() |> Seq.toArray
  

val z:int [] = [| 3; 4; 5 |]