public void addField(Field<?> field, List<String> categoryNames, List<String> categoryValues){
RExpEncoder encoder = getEncoder();
if(categoryNames.size() != categoryValues.size()){
throw new IllegalArgumentException();
}
CategoricalFeature categoricalFeature;
if((DataType.BOOLEAN).equals(field.getDataType()) && (BooleanFeature.VALUES).equals(categoryValues)){
categoricalFeature = new BooleanFeature(encoder, field);
} else
{
categoricalFeature = new CategoricalFeature(encoder, field, categoryValues);
}
putFeature(field.getName(), categoricalFeature);
for(int i = 0; i < categoryNames.size(); i++){
String categoryName = categoryNames.get(i);
String categoryValue = categoryValues.get(i);
BinaryFeature binaryFeature = new BinaryFeature(encoder, field, categoryValue);
putFeature(FieldName.create((field.getName()).getValue() + categoryName), binaryFeature);
}
this.fields.add(field);
}