Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R类型提供程序和Ggplot2_R_F#_Type Providers - Fatal编程技术网

R类型提供程序和Ggplot2

R类型提供程序和Ggplot2,r,f#,type-providers,R,F#,Type Providers,有人两者都用过吗? 我不介意看一个快速入门的简短示例 我可以运行example.fsx脚本:acf函数会对显示的图形产生副作用 但我不知道如何让ggplot图形出现 open RProvider.ggplot2 open RProvider.utils R.setwd @"C:/code/pp/Datasets/output/Kaggle/dontgetkicked" let f = R.read_csv("measure_DNGtraining.csv") R.qplot("erase_ra

有人两者都用过吗? 我不介意看一个快速入门的简短示例

我可以运行example.fsx脚本:acf函数会对显示的图形产生副作用

但我不知道如何让ggplot图形出现

open RProvider.ggplot2
open RProvider.utils

R.setwd @"C:/code/pp/Datasets/output/Kaggle/dontgetkicked"
let f = R.read_csv("measure_DNGtraining.csv")
R.qplot("erase_rate", "components",f)
那就让位于

val it : SymbolicExpression =
  RDotNet.SymbolicExpression {Engine = RDotNet.REngine;
                              IsClosed = false;
                              IsInvalid = false;
                              IsProtected = true;
                              Type = List;}

我正在阅读说明,但如果有人手头有一个代码片段…

我认为您需要将结果表达式传递到
R.print

R.qplot("erase_rate", "components",f)
|> R.print 
通过F#类型提供程序使用ggplot2的问题在于ggplot2库有点太聪明了。我已经玩了一段时间了,似乎只要您只使用
qplot
函数,它就可以很好地工作。如果您想做一些更奇特的事情,那么只需将R代码编写为字符串并调用
R.eval
可能会更容易。为此,您需要:

// Helper function to make calling 'eval' easier
let eval (text:string) =
  R.eval(R.parse(namedParams ["text", text ]))

eval("library(\"ggplot2\")")

// Assuming we have dataframe 'ohlc' with 'Date' and 'Open'
eval("""
  print(
    ggplot(ohlc, aes(x=Date, y=Open)) + 
    geom_line() + 
    geom_smooth()
  )
  """)
我还花了一些时间研究如何将数据从F#传递到R(即,基于F#的数据创建R数据帧,就像CSV类型的提供者一样)。因此,为了填充
ohlc
数据框,我使用了这个(其中
SampleData
是Yahoo的CSV提供者):


正如Tomas指出的,您需要打印ggplot2的结果才能显示任何内容

我们通过在标准F#interactive startip脚本中向fsi会话添加打印机来实现这一点:

fsi.AddPrinter(fun (sexp: RDotNet.SymbolicExpression) -> sexp.Print())

这使得RProvider更加有用,因为它以与在R中打印相同的方式打印每个操作的结果。

PS:我可以在晚上稍后分享一个更完整的示例;-)有一个关于使用ggplot和F#RProvider进行绘图的博客
fsi.AddPrinter(fun (sexp: RDotNet.SymbolicExpression) -> sexp.Print())