void PreprocessingData_Changed(object sender, DataPreprocessingChangedEventArgs e) { switch (e.Type) { case DataPreprocessingChangedEventType.DeleteColumn: case DataPreprocessingChangedEventType.ChangeColumn: MissingValueIndicies.Remove(e.Column); ValuesWithoutNaN.Remove(e.Column); break; case DataPreprocessingChangedEventType.AddColumn: //cache does not need to be updated, will be calculated the first time it is requested break; case DataPreprocessingChangedEventType.DeleteRow: case DataPreprocessingChangedEventType.AddRow: case DataPreprocessingChangedEventType.ChangeItem: case DataPreprocessingChangedEventType.Any: case DataPreprocessingChangedEventType.Transformation: default: MissingValueIndicies = new Dictionary <int, IList <int> >(); ValuesWithoutNaN = new Dictionary <int, IList>(); break; } }
public IEnumerable <T> GetValuesWithoutNaN <T>(int columnIndex, bool considerSelection) { if (considerSelection) { var selectedRows = preprocessingData.Selection[columnIndex]; List <T> values = new List <T>(); foreach (var rowIdx in selectedRows) { if (!IsMissingValue(columnIndex, rowIdx)) { values.Add(preprocessingData.GetCell <T>(columnIndex, rowIdx)); } } return(values); } else { if (!ValuesWithoutNaN.ContainsKey(columnIndex)) { List <T> values = new List <T>(); for (int row = 0; row < preprocessingData.Rows; ++row) { if (!IsMissingValue(columnIndex, row)) { values.Add(preprocessingData.GetCell <T>(columnIndex, row)); } } ValuesWithoutNaN[columnIndex] = values; } return((IEnumerable <T>)ValuesWithoutNaN[columnIndex]); } }
void FilterLogic_FilterChanged(object sender, EventArgs e) { //recalculate for (int i = 0; i < Columns; i++) { MissingValueIndicies.Remove(i); ValuesWithoutNaN.Remove(i); } }