2015-10-14 4 views
3

У меня есть приложение C#, которому нужен дедлевый кадр в качестве входных данных. У меня также есть R-скрипт, который возвращает фрейм данных, и я не хочу повторно реализовывать алгоритм в R-скрипте с помощью C#. Я попытался использовать R.Net, я могу получить фрейм данных из R-скрипта в приложении C#, но его тип - RDotNet.DataFrame. Есть ли способ конвертировать RDotNet.DataFrame в Deedle Frame в код C#?C# - Преобразование R Data Frame в Deedle.Frame

Я также думаю о создании библиотеки DLL F #, которая вызывает сценарий R, а затем использовать эту библиотеку dll в коде C#. Является ли это возможным?

ответ

1

Если вы используете Deedle из F #, вы также можете использовать поставщика типа R. Эти два хорошо интегрированы, и вы можете вызвать R из F # и вернуть фрейм данных 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 и Deedle, также доступен. Поэтому, если вы хотите использовать его напрямую, местом для запуска является функция tryCreateFramein 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_ - текстовая строка, он ничего не печатает. И 'let frame: Frame = result.GetValue()', эта строка кода также печатает данные. Итак, я думаю, что конвертер между Deedle.Frame и R Frame печатает данные. Есть ли способ избежать этого? – Fanliver

Смежные вопросы