我有自己的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|])
答案 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 |]