(F#RProvider)意味着给出一个奇怪的结果 - 在某些情况下

时间:2014-07-18 12:51:45

标签: r f# interop type-providers

我开始使用RProvider。对于初学者,我刚尝试以不同的方式评估函数。看来我已经遇到了问题(也许是我理解RProvider如何工作的问题)。我以四种不同的方式运行相同的功能,我认为这是相同的。然而,这四个例子给我提供了两个不同的结果。

R.sapply(R.c(1,2,3,4,5), R.eval(R.parse(text="mean"))).GetValue<float[]>() 
// val it : float [] = [|1.0; 2.0; 3.0; 4.0; 5.0|]
R.sapply(R.c(1,2,3,4,5),"mean").GetValue<float[]>() 
// val it : float [] = [|1.0; 2.0; 3.0; 4.0; 5.0|]
R.mean(R.c(1,2,3,4,5)).GetValue<float[]>() 
// val it : float [] = [|3.0|]
R.eval(R.parse(text="mean(c(1,2,3,4,5))")).GetValue<float[]>() 
// val it : float [] = [|3.0|]

谁能告诉我为什么会这样?我自己的猜测是R.sapply以元素方式应用给定的函数。但是我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

do.call()是R中用于将函数“应用”到参数列表中的函数(与在函数或值列表上应用或映射函数略有不同,这是{{1家庭确实)。

你想要的R函数是

*apply

根据评论(我不会说F#),F#模拟将是:

do.call("mean",list(c(1,2,3,4,5)))