我仍然是F#的菜鸟,我不了解加载和使用包的所有语法和逻辑。
例如,我想使用(Blue Mountain' s)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得到了一些警告/错误。 执行exe时,看起来Windows屏幕很忙,我设法看到一些图形,但看起来它们与Rtype.fs所说的无关......
感谢您的帮助!
答案 0 :(得分:1)
首先,我不建议使用不同版本的R.NET而不是RProvider自动安装的R.NET作为依赖项。装载有点脆弱,可能会破坏。
1)关于路径,您应该能够将相对路径传递给#load
,因此只需从脚本中删除#I
即可。
2)当从项目(而不是脚本文件)引用依赖项时,需要向项目引用添加依赖项。在Visual Studio中,通过右键单击" References"在您的项目中并使用"添加参考"。对于类型提供者,您还需要单击"启用"加载引用时。