2016-09-29 3 views
1

Может ли форматирование FsLab/f # обрабатывать произвольное R Визуализация из сторонних библиотек?FsLab и R Участки от сторонних 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.

Я что-то упустил?

(всплывающий граф сам тоже выглядит не совсем верно, но я предполагаю, что это другая проблема!)

ответ

2

Шаблон FsLab был несколько ненадежен при этом, так что я решил удалить частичную поддержку, которая используется быть там на данный момент (было бы неплохо вернуть его, но он должен работать должным образом :-)).

Моя рекомендация - написать вспомогательную функцию, которая захватывает вывод R в изображение и затем возвращает изображение. У меня нет 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 ***)