我正在第一次尝试通过 F# R 类型提供程序使用 R 的 GGPlot2。
这是我的代码:
let (++) (plot1:RDotNet.SymbolicExpression) (plot2:RDotNet.SymbolicExpression) =
R.``+``(plot1, plot2)
let ChartGgPlot2 (prices : Prices) =
try
let fileName = makeFile ".png"
let priceSeries = prices.Prices |> Seq.map (fun p -> p.Date, p.Close) |> series
let dataFrame = Deedle.Frame.ofRecords priceSeries
R.png(filename=fileName, height=200, width=300, bg="white") |> ignore
R.ggplot(
namedParams[
"data", box dataFrame;
"mapping", box (
R.aes__string(x="Date", y="Close"))])
++ R.geom__point() |> ignore
R.dev_off() |> ignore
fileName |> Choice.succeed
with
| e -> Choice.fail e.Message
p.Date
是 System.DateTime
和p.Close
是一个 double 。
在运行时,我在调用 R.ggplot
时遇到此异常:
No converter registered for type Deedle.Frame`2[[System.DateTime, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]] or any of its base types
我已经尝试了此处建议的解决方案(复制两个 DLL):Deedle frame to R但这并没有什么区别。
我还应该说我对 series
的使用和Frame.ofRecords
在这一点上几乎是猜测。
非常感谢。
编辑:
这是一个已编译的 .NET 4.6 项目,其中通过 Nuget 添加了 RProvider (1.1.20) 和 Deedle.RPlugin (1.2.5)。
ggplot2 在 RGui 中可以正常工作。
最佳答案
托马斯关于配置文件和探测位置的评论不是答案 - 但它让我知道了真正的答案。
我需要使用 Nuget 添加对 Deedle.RPlugin 的引用,不仅要添加对执行 R 调用以呈现图表的程序集的引用,还要添加对引用图表程序集的“主”程序集的引用。
我不知道这是否是构建系统与类型提供程序交互方式的固有限制。但现在我很高兴能找到解决方法。
(出于教学目的,如果知道是否可以进行长期修复,那就太好了。)
非常感谢那些回复的人。
关于r - 使用 F# R 类型提供程序和 ggplot2“没有为 Deedle.Frame 类型注册转换器”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39806467/