2015-12-18 3 views
0

При использовании R.NET для создания S4 object (выхода функции из mirt пакета.Как создать S4 объект с помощью RdotNet

engine.Evaluate("library(mirt); data(LSAT6); x=mirt(LSAT6,1)"); 
S4Object Convertedinput = inputtoCsharp.AsS4(); 

мне нужно, чтобы увидеть выход х (. все щели х) в окне сообщения

Как я могу сделать это

, потому что нет никакого способа, который делает что-то вроде этого:?

int[] resp_c = new int [] {1,1,1,1}; 
**IntegerVector resp_cR = engine.CreateIntegerVector(resp_c);** 
engine.SetSymbol("resp_c", resp_cR); 
engine.Evaluate("ff=fscores(x, response.pattern=resp_c)"); 

выше предмет делается для целочисленного вектора. Мне нужно эмулировать то же самое для S4 object в R.

Как я смогу это сделать?

ответ

1

Не совсем уверен, что я понимаю ваш запрос, но пример кода ниже должен помочь. Он также доступен от An R.NET support github repo, метод ReproStackOverflow_34355201 в файле /ReproUsers/Program.cs. Для справок в будущем, written at commit 43a8ec3

engine.AutoPrint = true; 
//samples taken from ?fscores man page in package mirt 
engine.Evaluate("library(mirt)"); 
// 'Science' is a prepackage sample data in mirt; you can use 'engine.CreateDataFrame' in C# to create your own if need be. 
engine.Evaluate("mod <- mirt(Science, 1)"); 
engine.Evaluate("class(mod)"); 
S4Object modcs = engine.GetSymbol("mod").AsS4(); 
IDictionary<string, string> slotTypes = modcs.GetSlotTypes(); 
if (slotTypes.Keys.Contains("Fit")) 
{ 
    GenericVector fit = modcs["Fit"].AsList(); 
    // should check logLik in fit.Names; 
    double logLik = fit["logLik"].AsNumeric()[0]; 
} 
engine.Evaluate("tabscores <- fscores(mod, full.scores = FALSE)"); 
engine.Evaluate("head(tabscores)"); 
engine.Evaluate("class(tabscores)"); 
NumericMatrix tabscorescs = engine.GetSymbol("tabscores").AsNumericMatrix();