在 F# 中加载 RProvider
loading RProvider in F#
我仍然是 F# 的菜鸟,我不了解加载和使用包的所有语法和逻辑。
例如,我想使用(蓝山的)RProvider。
http://bluemountaincapital.github.io/FSharpRProvider/index.html
使用 VS2015,在我当前的解决方案中,我已经使用 PM 控制台和 Install-Package RProvider
安装了软件包
我对 RProvider.fsx 做了一些修改,因为我有更新版本的 R.NET 社区
#nowarn "211"
// Standard NuGet or Paket location
#I "."
#I "lib/net40"
// Standard NuGet locations for R.NET
#I "../R.NET.Community.1.6.4/lib/net40"
#I "../R.NET.Community.FSharp.0.1.9/lib/net40"
// Standard Paket locations for R.NET
#I "../R.NET.Community/lib/net40"
#I "../R.NET.Community.FSharp.1.6.4/lib/net40"
// Try various folders that people might like
#I "bin"
#I "../bin"
#I "../../bin"
#I "lib"
#I "../packages"
// Reference RProvider and RDotNet
#r "RDotNet.dll"
#r "RDotNet.FSharp.dll"
#r "RProvider.dll"
#r "RProvider.Runtime.dll"
open RProvider
do fsi.AddPrinter(fun (synexpr:RDotNet.SymbolicExpression) -> synexpr.Print())
现在我的问题是
1) 如何从 F# interactive 加载包 (RProvider)?
好吧,实际上我设法这样做了
例如 RProvider.fsx 文件在路径中
C:\Users\Fagui\Documents\GitHub\Learning Fsharp\Algo Stanford\packages\RProvider.1.1.15\RProvider.fsx
我做的是
#I @"C:\Users\Fagui\Documents\GitHub\Learning Fsharp\Algo Stanford";;
#load "packages\RProvider.1.1.15\RProvider.fsx";;
而且有效:-)
但是我可以避免写整个路径吗?
2) 在 VS2015 中,如果我想将它包含在解决方案中......
在解决方案资源管理器中,我包含了 RProvider.fsx 文件(在 AssemblyInfo.fs、App.config 和 packages.config 之后,对吗?)
最后是程序本身 Rtype.fs
我正在尝试重现来自
http://bluemountaincapital.github.io/FSharpRProvider/Statistics-QuickStart.html
open System
open *RDotNet* // the namespace or module 'RDotNet' is not defined
open *RProvider*
open *RProvider*.graphics
open RProvider.stats
// let x = System.Environment.CurrentDirectory
// val x : string
printfn "hello world"
Console.ReadKey() |> ignore
// Random number generator
let rng = Random()
let rand () = rng.NextDouble()
// Generate fake X1 and X2
let X1s = [ for i in 0 .. 9 -> 10. * rand () ]
let X2s = [ for i in 0 .. 9 -> 5. * rand () ]
// Build Ys, following the "true" model
let Ys = [ for i in 0 .. 9 -> 5. + 3. * X1s.[i] - 2. * X2s.[i] + rand () ]
let dataset =
namedParams [
"Y", box Ys;
"X1", box X1s;
"X2", box X2s; ]
|> R.data_frame
let result = R.lm(formula = "Y~X1+X2", data = dataset)
let coefficients = result.AsList().["coefficients"].AsNumeric()
let residuals = result.AsList().["residuals"].AsNumeric()
let summary = R.summary(result)
*summary.AsList().["r.squared"].AsNumeric()
R.plot result*
//这个表达式的类型应该是 'unit' 但类型是 'NumericVector'...
我通过 Intellisense 获得了一些 warnings/errors,尽管编译器管理了构建。
执行 exe 时,windows 屏幕看起来很忙,我设法看到了一些图表,但它们看起来与 Rtype.fs 所说的无关...
感谢您的帮助!
编辑
首先,我不建议使用与 RProvider 作为依赖项自动安装的版本不同的 R.NET 版本。加载有点脆弱,可能会破坏东西。
1) 关于路径,您应该能够将相对路径传递给 #load
,因此只需从脚本中删除 #I
即可。
2) 从项目(而不是从脚本文件)引用依赖项时,您需要向项目引用添加依赖项。在 Visual Studio 中,这是通过右键单击项目中的 "References" 并使用 "Add Reference" 来完成的。对于类型提供者,您还需要在加载引用时单击 "Enable"。
我仍然是 F# 的菜鸟,我不了解加载和使用包的所有语法和逻辑。
例如,我想使用(蓝山的)RProvider。 http://bluemountaincapital.github.io/FSharpRProvider/index.html
使用 VS2015,在我当前的解决方案中,我已经使用 PM 控制台和 Install-Package RProvider
我对 RProvider.fsx 做了一些修改,因为我有更新版本的 R.NET 社区
#nowarn "211"
// Standard NuGet or Paket location
#I "."
#I "lib/net40"
// Standard NuGet locations for R.NET
#I "../R.NET.Community.1.6.4/lib/net40"
#I "../R.NET.Community.FSharp.0.1.9/lib/net40"
// Standard Paket locations for R.NET
#I "../R.NET.Community/lib/net40"
#I "../R.NET.Community.FSharp.1.6.4/lib/net40"
// Try various folders that people might like
#I "bin"
#I "../bin"
#I "../../bin"
#I "lib"
#I "../packages"
// Reference RProvider and RDotNet
#r "RDotNet.dll"
#r "RDotNet.FSharp.dll"
#r "RProvider.dll"
#r "RProvider.Runtime.dll"
open RProvider
do fsi.AddPrinter(fun (synexpr:RDotNet.SymbolicExpression) -> synexpr.Print())
现在我的问题是
1) 如何从 F# interactive 加载包 (RProvider)? 好吧,实际上我设法这样做了 例如 RProvider.fsx 文件在路径中 C:\Users\Fagui\Documents\GitHub\Learning Fsharp\Algo Stanford\packages\RProvider.1.1.15\RProvider.fsx
我做的是
#I @"C:\Users\Fagui\Documents\GitHub\Learning Fsharp\Algo Stanford";;
#load "packages\RProvider.1.1.15\RProvider.fsx";;
而且有效:-) 但是我可以避免写整个路径吗?
2) 在 VS2015 中,如果我想将它包含在解决方案中...... 在解决方案资源管理器中,我包含了 RProvider.fsx 文件(在 AssemblyInfo.fs、App.config 和 packages.config 之后,对吗?) 最后是程序本身 Rtype.fs
我正在尝试重现来自 http://bluemountaincapital.github.io/FSharpRProvider/Statistics-QuickStart.html
open System
open *RDotNet* // the namespace or module 'RDotNet' is not defined
open *RProvider*
open *RProvider*.graphics
open RProvider.stats
// let x = System.Environment.CurrentDirectory
// val x : string
printfn "hello world"
Console.ReadKey() |> ignore
// Random number generator
let rng = Random()
let rand () = rng.NextDouble()
// Generate fake X1 and X2
let X1s = [ for i in 0 .. 9 -> 10. * rand () ]
let X2s = [ for i in 0 .. 9 -> 5. * rand () ]
// Build Ys, following the "true" model
let Ys = [ for i in 0 .. 9 -> 5. + 3. * X1s.[i] - 2. * X2s.[i] + rand () ]
let dataset =
namedParams [
"Y", box Ys;
"X1", box X1s;
"X2", box X2s; ]
|> R.data_frame
let result = R.lm(formula = "Y~X1+X2", data = dataset)
let coefficients = result.AsList().["coefficients"].AsNumeric()
let residuals = result.AsList().["residuals"].AsNumeric()
let summary = R.summary(result)
*summary.AsList().["r.squared"].AsNumeric()
R.plot result*
//这个表达式的类型应该是 'unit' 但类型是 'NumericVector'...
我通过 Intellisense 获得了一些 warnings/errors,尽管编译器管理了构建。 执行 exe 时,windows 屏幕看起来很忙,我设法看到了一些图表,但它们看起来与 Rtype.fs 所说的无关...
感谢您的帮助!
编辑
首先,我不建议使用与 RProvider 作为依赖项自动安装的版本不同的 R.NET 版本。加载有点脆弱,可能会破坏东西。
1) 关于路径,您应该能够将相对路径传递给 #load
,因此只需从脚本中删除 #I
即可。
2) 从项目(而不是从脚本文件)引用依赖项时,您需要向项目引用添加依赖项。在 Visual Studio 中,这是通过右键单击项目中的 "References" 并使用 "Add Reference" 来完成的。对于类型提供者,您还需要在加载引用时单击 "Enable"。