public static void SetupMDataForInput(IMatrixData data, int[] columnIndx, int[] nameInd, double baseVal) { data.StringColumns = ArrayUtils.SubList(data.StringColumns, nameInd); data.StringColumnNames = ArrayUtils.SubList(data.StringColumnNames, nameInd); data.StringColumnDescriptions = ArrayUtils.SubList(data.StringColumnDescriptions, nameInd); List <int> toConvert = new List <int>(); List <int> numList = new List <int>(); int expressInd = 0; foreach (int i in columnIndx) { if (i < data.ColumnCount) { toConvert.Add(i); numList.Add(data.NumericColumnCount + expressInd); expressInd += 1; } else { numList.Add(i - data.ColumnCount); } } int[] numArr = numList.ToArray(); //convert expression to numeric data.ExtractColumns(toConvert.ToArray()); ExpressionToNumeric(Enumerable.Range(0, data.ColumnCount).ToArray(), data); data.NumericColumns = ArrayUtils.SubList(data.NumericColumns, numArr); //change data form depending whether needed if (baseVal > 0) { foreach (int col in numArr) { for (int i = 0; i < data.RowCount; i++) { data.NumericColumns[col][i] = Math.Pow(baseVal, data.NumericColumns[col][i]); } } } data.NumericColumnNames = ArrayUtils.SubList(data.NumericColumnNames, numArr); data.NumericColumnDescriptions = ArrayUtils.SubList(data.NumericColumnDescriptions, numArr); NumericToString(Enumerable.Range(0, numArr.Length).ToArray(), data); for (int j = 0; j < data.StringColumnCount; j++) { for (int i = 0; i < data.RowCount; i++) { data.StringColumns[j][i] = string.Equals(data.StringColumns[j][i], "NaN") ? "NA" : data.StringColumns[j][i]; } } //clearing irrelevant info data.ClearMultiNumericColumns(); data.ClearMultiNumericRows(); data.ClearCategoryColumns(); data.ClearCategoryRows(); }
private static void SetAnnotationRows(IMatrixData result, IMatrixData mdata1, IMatrixData mdata2) { result.CategoryRowNames.Clear(); result.CategoryRowDescriptions.Clear(); result.ClearCategoryRows(); result.NumericRowNames.Clear(); result.NumericRowDescriptions.Clear(); result.NumericRows.Clear(); string[] allCatNames = ArrayUtils.Concat(mdata1.CategoryRowNames, mdata2.CategoryRowNames); allCatNames = ArrayUtils.UniqueValues(allCatNames); result.CategoryRowNames = new List<string>(); string[] allCatDescriptions = new string[allCatNames.Length]; for (int i = 0; i < allCatNames.Length; i++){ allCatDescriptions[i] = GetDescription(allCatNames[i], mdata1.CategoryRowNames, mdata2.CategoryRowNames, mdata1.CategoryRowDescriptions, mdata2.CategoryRowDescriptions); } result.CategoryRowDescriptions = new List<string>(); for (int index = 0; index < allCatNames.Length; index++){ string t = allCatNames[index]; string[][] categoryRow = new string[mdata1.ExpressionColumnCount + mdata2.ExpressionColumnCount][]; for (int j = 0; j < categoryRow.Length; j++){ categoryRow[j] = new string[0]; } int ind1 = mdata1.CategoryRowNames.IndexOf(t); if (ind1 >= 0){ string[][] c1 = mdata1.GetCategoryRowAt(ind1); for (int j = 0; j < c1.Length; j++){ categoryRow[j] = c1[j]; } } int ind2 = mdata2.CategoryRowNames.IndexOf(t); if (ind2 >= 0){ string[][] c2 = mdata2.GetCategoryRowAt(ind2); for (int j = 0; j < c2.Length; j++){ categoryRow[mdata1.ExpressionColumnCount + j] = c2[j]; } } result.AddCategoryRow(allCatNames[index], allCatDescriptions[index], categoryRow); } string[] allNumNames = ArrayUtils.Concat(mdata1.NumericRowNames, mdata2.NumericRowNames); allNumNames = ArrayUtils.UniqueValues(allNumNames); result.NumericRowNames = new List<string>(allNumNames); string[] allNumDescriptions = new string[allNumNames.Length]; for (int i = 0; i < allNumNames.Length; i++){ allNumDescriptions[i] = GetDescription(allNumNames[i], mdata1.NumericRowNames, mdata2.NumericRowNames, mdata1.NumericRowDescriptions, mdata2.NumericRowDescriptions); } result.NumericRowDescriptions = new List<string>(allNumDescriptions); foreach (string t in allNumNames){ double[] numericRow = new double[mdata1.ExpressionColumnCount + mdata2.ExpressionColumnCount]; for (int j = 0; j < numericRow.Length; j++){ numericRow[j] = double.NaN; } int ind1 = mdata1.NumericRowNames.IndexOf(t); if (ind1 >= 0){ double[] c1 = mdata1.NumericRows[ind1]; for (int j = 0; j < c1.Length; j++){ numericRow[j] = c1[j]; } } int ind2 = mdata2.NumericRowNames.IndexOf(t); if (ind2 >= 0){ double[] c2 = mdata2.NumericRows[ind2]; for (int j = 0; j < c2.Length; j++){ numericRow[mdata1.ExpressionColumnCount + j] = c2[j]; } } result.NumericRows.Add(numericRow); } }