Участки 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 ***)
Другие вопросы по тегам