2016-01-24 2 views
0

Я все еще noob с F #, и я не понимаю весь синтаксис и логику загрузки и использования пакетов.loading RProvider in 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), как загрузить пакет (RProvider) из F # Interactive? ну, собственно, мне это удалось сделать Например, файл 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, если я хочу включить его в решение ... в explorer explorer я включил файл RProvider.fsx (ниже AssemblyInfo.fs, App.config и packages.config приходят после, is это право?) и последний саму программу 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* 

// это выражение должно быть «блок» типа, но имеет тип «NumericVector '...

Я получаю некоторые предупреждения/ошибки от Intellisense, хотя компилятор управляет сборкой. При выполнении exe, похоже, что экран Windows занят, мне удается увидеть некоторые графики, но они выглядят так, как будто они не имеют никакого отношения к тому, что говорит Rtype.fs ...

спасибо за помощь!

EDIT enter image description here enter image description here

ответ

1

Прежде всего, я бы не рекомендовал использовать другую версию R.NET, чем тот, который RProvider устанавливает автоматически, как зависимость. Погрузка немного хрупкая, и это может сломать вещи.

1) Что касается пути, вы должны иметь возможность пройти относительный путь до #load, поэтому просто отбрасывание #I из вашего скрипта должно сделать трюк.

2) Если вы ссылаетесь на зависимость от проекта (а не от файла сценария), вам нужно добавить зависимость от ссылок на проект. В Visual Studio это делается, щелкнув правой кнопкой мыши на «Ссылки» в вашем проекте и используя «Добавить ссылку». Для поставщиков типов вам также нужно нажать «Включить», когда ссылка будет загружена.

+0

Я добавил скриншоты. Я думаю, пакет R.NET был установлен вместе с RProvider. Таким образом, существует несоответствие между версией, установленной NuGET, и версией, на которую ссылается RProvider.fsx, которая загружается вместе с ней. Кроме того, на моем скриншоте я могу увидеть RProvider в ссылках, но я не помню, как нажимал «Enable» в любое время. когда я вижу свойства RProvider, я не вижу ничего похожего на галочку –

+1

Вы должны увидеть что-то вроде этого: https://rodhern.files.wordpress.com/2015/03/3-tpwarning_thumb.png?w=604&h= 251 –

+1

В диалоговом окне «Параметры» убедитесь, что поставщик включен (флажок установлен): http://i.stack.imgur.com/Xxqd2.png –