2015-10-14 140 views
3

我有一個C#應用程序需要一個Deedle Frame作爲輸入數據。我還有一個返回數據框的R腳本,我不想在C腳本中重新實現R腳本中的算法。 我嘗試使用R.Net,我可以從R腳本中獲取C#應用程序中的數據幀,但其類型是RDotNet.DataFrame。 是否有任何將C#代碼中的RDotNet.DataFrame轉換爲Deedle Frame?C# - 將R數據幀轉換爲Deedle.Frame

我也在考慮創建一個調用R腳本的F#dll庫,然後在C#代碼中使用該dll庫。可能嗎?

回答

1

如果您使用F#中的Deedle,則還可以使用R類型提供程序。這兩者很好地集成在一起,您可以從F#調用R並獲取Deedle數據框。有a good example on this in the Deedle documentation

R提供商將自動將R數據幀轉換爲Deedle幀。例如:

open RProvider.datasets 

// Get mtcars as a typed Deedle frame 
let mtcars : Frame<string, string> = R.mtcars.GetValue() 

在R provider和Deedle中進行轉換的源代碼也可用。所以如果你想直接使用它,那麼開始的地方是tryCreateFrame函數in Deedle source code

在這一點上,這並沒有真正暴露給C#,但我們當然會歡迎一個拉請求使得Deedle :-)成爲可能。

+0

我可以使用F#來獲取R腳本返回的幀。 但是如何發送一個Deedle幀到R腳本。我想構建一個接收和Deedle Frame作爲輸入數據的應用程序,執行一些數據處理,然後返回一個Deedle Frame作爲輸出數據 – Fanliver

+0

這也應該與R提供程序自動一起工作。每當您將Deedle框架傳遞給R提供者導出的函數時,它將自動轉換爲R框架。請參閱:http://bluemountaincapital.github.io/Deedle/rinterop.html#From-Deedle-to-R –

+0

當我運行這行代碼'R.assign(「dataframe」,frame)'時,_frame_是一個Deedle .Frame,我看到它也將數據幀打印到控制檯屏幕。但是當我運行這個R.assign(「text」,text)時,_text_是一個文本字符串,它不會打印任何東西。 'let frame:Frame = result.GetValue()',這行代碼也會打印數據。 所以我認爲Deedle.Frame和R Frame之間的轉換器打印數據。 有什麼辦法可以避免它? – Fanliver