Участки FsLab и R из сторонних библиотек R
Может ли форматирование FsLab/ F# обрабатывать произвольную визуализацию R из сторонних библиотек?
Я пытался включить диаграмму igraph безуспешно.
Я могу получить (очень) простой график графика, чтобы выскочить из ФСИ, оценив это:
#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
включен.
Я что-то здесь упускаю?
(Сам всплывающий график тоже выглядит не совсем правильно, но я думаю, что это другая проблема!)
1 ответ
При этом шаблон 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 ***)