2013-05-29 107 views
4

有沒有人用過? 我不介意看到一個簡短的例子來快速啓動。R型供應商和Ggplot2

我可以運行example.fsx腳本:將acf函數的副作用顯示出來。

但我不知道如何顯示ggplot圖形。

open RProvider.ggplot2 
open RProvider.utils 

R.setwd @"C:/code/pp/Datasets/output/Kaggle/dontgetkicked" 
let f = R.read_csv("measure_DNGtraining.csv") 
R.qplot("erase_rate", "components",f) 

國債收益率到

val it : SymbolicExpression = 
    RDotNet.SymbolicExpression {Engine = RDotNet.REngine; 
           IsClosed = false; 
           IsInvalid = false; 
           IsProtected = true; 
           Type = List;} 

我讀的指令,但如果任何人有一個片段得心應手......

+0

PS:我可以在晚上晚些時候分享更完整的示例;-) –

回答

11

我認爲你需要將所得的表達傳遞給R.print

R.qplot("erase_rate", "components",f) 
|> R.print 

通過F#類型提供程序使用ggplot2的問題在於ggplot2 l圖書館太聰明瞭。我一直在玩這個遊戲一段時間,只要你只使用qplot函數,它看起來效果很好。如果您想要做更多的事情,那麼只需將R代碼寫成字符串並撥打R.eval即可。要做到這一點,你需要:

// Helper function to make calling 'eval' easier 
let eval (text:string) = 
    R.eval(R.parse(namedParams ["text", text ])) 

eval("library(\"ggplot2\")") 

// Assuming we have dataframe 'ohlc' with 'Date' and 'Open' 
eval(""" 
    print(
    ggplot(ohlc, aes(x=Date, y=Open)) + 
    geom_line() + 
    geom_smooth() 
) 
    """) 

我也花了一些時間搞清楚如何從F#的數據傳遞到R(即創建一個基於從F#數據R的數據框,就像一個CSV類型的供應商)。因此,填充ohlc數據幀,我用這個(其中SampleData是一個CSV提供商雅虎):

let df = 
    [ "Date", box [| for r in SampleData.msftData -> r.Date |] 
    "Open", box [| for r in SampleData.msftData -> r.Open |] 
    "High", box [| for r in SampleData.msftData -> r.High |] 
    "Low", box [| for r in SampleData.msftData -> r.Low |] 
    "Close", box [| for r in SampleData.msftData -> r.Close |] ] 
    |> namedParams 
    |> R.data_frame 
R.assign("ohlc", df) 
+0

有一個關於使用ggplot和F#RProvider從[evelinag](http://evelinag.com /blog/2015/12-03-using-ggplot2-from-f/#.WMpIcWxPoUQ) –

3

正如托馬斯所指出的,你需要打印結果爲GGPLOT2顯示任何內容。

fsi.AddPrinter(fun (sexp: RDotNet.SymbolicExpression) -> sexp.Print()) 

這使得RProvider更加有用,因爲它打印每一個操作的方法一樣的結果:

我們通過將打印機添加到我們的標準的F#交互startip腳本FSI會話實現這一它會打印在R.