r - 使用 F# R 类型提供程序和 ggplot2“没有为 Deedle.Frame 类型注册转换器”

标签 r ggplot2 f# deedle

我正在第一次尝试通过 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.DateSystem.DateTimep.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/

相关文章:

f# - F# 的 Main 中的 args[]

R 并排分组箱线图

c - Valgrind显示内存泄漏,现在该怎么办? R:C()扩展

r - ggplot2: geom_bar 堆叠条形图,指定条形轮廓颜色

r - ggplot 和 geom_sf 以及错误 : length(rows) == 1 is not TRUE

f# - 是否可以要求静态解析的类型参数是泛型类型?

.net - 两个列表的叉积

删除整个数据帧的多余类

r - 连接 R 中的列表列表

r - 使用 ggplot2 时 Dodge 不工作