来自第 3 方 R 库的 FsLab 和 R 图

FsLab and R Plots from 3rd party R Libraries

FsLab/f# 格式化可以处理来自第 3 方库的任意 R 可视化吗?

我一直在尝试添加 igraph 图表,但没有成功。

通过评估这个,我可以得到一个(非常)简单的图表从 fsi 中弹出:

#load "packages/FsLab/Themes/DefaultWhite.fsx"
#load "packages/FsLab/FsLab.fsx"

open Deedle
open FSharp.Data
open RProvider
open RProvider.graphics
open RProvider.igraph

let grpa = R.graph__from__literal("A--B, B-c")
let pl = R.plot_igraph(grpa)

但如果我尝试将其包含在日记中:

(*** include-value:pl ***)

我刚刚得到输出 RDotNet.SymbolicExpression

我是不是遗漏了什么?

(弹出图表本身看起来也不太正确,但我想这是另一个问题!)

FsLab 模板在执行此操作时有些不可靠,因此我决定暂时删除曾经存在的部分支持(最好找回它,但它应该可以正常工作:-) ).

我的建议是编写一个辅助函数,将 R 输出捕获到图像中,然后 return 图像。我没有安装 R 来测试这个,但是这些方面的东西至少应该适用于 R.plot

let capture f = 
  let file = Path.GetTempFileName() + ".png"   
  R.png(file) |> ignore
  let res = f()
  R.dev_off()
  let img = Image.FromStream(new MemoryStream(File.ReadAllBytes file))
  File.Delete(file)
  res, img

然后您将能够使用以下方法创建图表:

let pl, img = capture(fun () ->  
  R.plot(...) )

至于将此与 igraph 一起使用 - 我不确定,但有关如何将 igraph 输出保存到文件的教程应该有所帮助。我注意到的一件事是您有时需要调用 R.show 来渲染内容,所以也许可以尝试:

let _, img = capture(fun () ->  
  R.plot_igraph grpa |> R.show )

(*** include-value:img ***)