Hello All:
I've been busting my guts trying to get this function to work, but it runs out of memory after x = 3 or 4. I should be clearing all the stuff, trying every last trick I know.
What have I missed ? Is there a way I can explore further ?
I've run the code without all the R.NET stuff and runs fine , so I believe it must have to do with my R things.
See below:
I've been busting my guts trying to get this function to work, but it runs out of memory after x = 3 or 4. I should be clearing all the stuff, trying every last trick I know.
What have I missed ? Is there a way I can explore further ?
I've run the code without all the R.NET stuff and runs fine , so I believe it must have to do with my R things.
See below:
public static void ExampleFunction()
{
var oldPath = System.Environment.GetEnvironmentVariable("PATH");
var rPath = ALLRG___.RFOLDER();
var newPath = System.String.Format("{0}{1}{2}", rPath, System.IO.Path.PathSeparator, oldPath);
System.Environment.SetEnvironmentVariable("PATH", newPath);
REngine rEngine = REngine.CreateInstance("RDotNet");
rEngine.Initialize();
for (int x = 0; x < 20; x++)
{
int startPoint = 30;
for (int c = 30; c < 600; c++)
{
sdTable.Clear();
sdTable.Dispose();
sdTable = new DataTable();
sqlquery = " SELECT * FROM TEMPT_MAINTABLE " +
" WHERE SET_DAT_ID = " + c +
" AND POINT_DAT_ID >= 30 " +
" AND MODEL_ID = " + x +
" ORDER BY PRD_ID ASC, POINT_DAT_ID ASC ";
myCommand = new SqlCommand(sqlquery, bthConn);
sdReader = myCommand.ExecuteReader();
sdTable.Load(sdReader);
foreach (int sid in lsAllPrds)
{
prdTable.Clear();
prdTable.Dispose();
prdTable = new DataTable();
prdTable =
(
from dbl in sdTable.AsEnumerable()
where
dbl.Field<int>("PRD_ID") == sid &&
dbl.ItemArray.All(v => v != null && v != DBNull.Value)
orderby
dbl.Field<int>("POINT_DAT_ID") ascending
select dbl
).CopyToDataTable();
int use_length = prdTable.Rows.Count;
for (int i = -1; i < 15; i++)
{
string varName = "";
if (i >= 0) varName = indFldNames[i];
if (i == -1) varName = "SCORE_FIELD";
double[] tempDouble = new double[use_length];
for (int j = 0; j < use_length; j++)
tempDouble[j] = Convert.ToDouble(prdTable.Rows[j][varName]);
using (RDotNet.NumericVector prdPxVector = rEngine.CreateNumericVector(tempDouble))
{
rEngine.SetSymbol(varName, prdPxVector);
prdPxVector.Close();
prdPxVector.SetHandleAsInvalid();
prdPxVector.Dispose();
}
}
GC.Collect();
rEngine.ForceGarbageCollection();
rEngine.Evaluate("model_dataframe <- data.frame(" + indFldNames.InnerJoin(",") + ", SCORE_FIELD )");
rEngine.Evaluate("rm(" + indFldNames.InnerJoin(",") + ", SCORE_FIELD)");
rEngine.Evaluate("trans_model_dataframe <-" +
" ((model_dataframe[" + (model_period + 1) + ":" + (use_length) + ",]) - " +
" (model_dataframe[1:" + ((use_length - model_period)) + ",])) / " +
" (model_dataframe[1:" + ((use_length - model_period)) + ",]) ");
rquery = "m <- lm(SCORE_FIELD ~ " + indFldNames.InnerJoin(model_jchar) + "," +
" data= trans_model_dataframe)";
rEngine.Evaluate(rquery);
rEngine.Evaluate("m.RSQ <- summary(m)[['r.squared']]");
DynamicVector mRSQ = rEngine.GetSymbol("m.RSQ").AsVector();
double rSqOut = Convert.ToDouble(mRSQ[0]);
DynamicVector testvar5 = rEngine.GetSymbol("mNames").AsVector();
NumericMatrix testvar14t = rEngine.GetSymbol("mCoef").AsNumericMatrix();
for (int i = 0; i < testvar14t.RowCount; i++)
{
string tempIvN0 = testvar5[i].ToString();
string tempIvN = testvar5[i].ToString();
Single coeff = (Single)testvar14t[i, 0];
Single pvalue = (Single)testvar14t[i, 3];
if (Single.IsInfinity(coeff)) coeff = 0;
if (Single.IsNaN(coeff)) coeff = 0;
if (Single.IsInfinity(pvalue)) pvalue = 1;
if (Single.IsNaN(pvalue)) pvalue = 1;
DataRow oprNewRow = regnTable.NewRow();
oprNewRow["PRD_ID"] = sid;
oprNewRow["DAT_ID"] = c;
oprNewRow["LINDEX_ID"] = x;
oprNewRow["IVR_INDEX_ID"] = indVarCodes[tempIvN];
oprNewRow["IVR_INDEX_COEFF"] = coeff;
oprNewRow["IVR_INDEX_PVALUE"] = pvalue;
regnTable.Rows.Add(oprNewRow);
}
testvar5.Dispose();
testvar5 = null;
testvar14t.Dispose();
testvar14t = null;
mRSQ.Dispose();
mRSQ = null;
rEngine.Evaluate("rm(m)");
rEngine.Evaluate("rm(SCORE_FIELD)");
rEngine.Evaluate("rm(trans_model_dataframe)");
rEngine.Evaluate("rm(model_dataframe)");
rEngine.Evaluate("rm(m.RSQ)");
rEngine.Evaluate("rm(mNames)");
rEngine.Evaluate("rm(mCoef)");
rEngine.Evaluate("gc()");
rEngine.Evaluate("rm( list = ls( all = TRUE ) )");
rEngine.Evaluate("gc()");
}
GC.Collect();
rEngine.ForceGarbageCollection();
}
}
rEngine.Close();
rEngine.Dispose();
}