📄 instancefilter.java
字号:
instanceInfo.insertAttributeAt(new Attribute(oldAtt.name(), newVals),
m_Attribute);
m_NominalMapping = new int [oldAtt.numValues()];
for (int i = 0; i < m_NominalMapping.length; i++) {
boolean found = false;
for (int j = 0; j < selection.length; j++) {
if (selection[j] == i) {
m_NominalMapping[i] = j;
found = true;
break;
}
}
if (!found) {
m_NominalMapping[i] = -1;
}
}
}
setOutputFormat(instanceInfo);
return true;
}
/**
* Input an instance for filtering. Ordinarily the instance is processed
* and made available for output immediately. Some filters require all
* instances be read before producing output.
*
* @param instance the input instance
* @return true if the filtered instance may now be
* collected with output().
* @exception IllegalStateException if no input format has been set.
*/
public boolean input(Instance instance) {
if (getInputFormat() == null) {
throw new IllegalStateException("No input instance format defined");
}
if (m_NewBatch) {
resetQueue();
m_NewBatch = false;
}
if (instance.isMissing(m_Attribute)) {
if (getMatchMissingValues()) {
push((Instance)instance.copy());
return true;
} else {
return false;
}
}
if (isNumeric()) {
if (!m_Inverse) {
if (Utils.sm(instance.value(m_Attribute), m_Value)) {
push((Instance)instance.copy());
return true;
}
} else {
if (Utils.grOrEq(instance.value(m_Attribute), m_Value)) {
push((Instance)instance.copy());
return true;
}
}
}
if (isNominal()) {
if (m_Values.isInRange((int)instance.value(m_Attribute))) {
Instance temp = (Instance)instance.copy();
if (getModifyHeader()) {
temp.setValue(m_Attribute,
m_NominalMapping[(int)instance.value(m_Attribute)]);
}
push(temp);
return true;
}
}
return false;
}
/**
* Returns true if selection attribute is nominal.
*
* @return true if selection attribute is nominal
*/
public boolean isNominal() {
if (getInputFormat() == null) {
return false;
} else {
return getInputFormat().attribute(m_Attribute).isNominal();
}
}
/**
* Returns true if selection attribute is numeric.
*
* @return true if selection attribute is numeric
*/
public boolean isNumeric() {
if (getInputFormat() == null) {
return false;
} else {
return getInputFormat().attribute(m_Attribute).isNumeric();
}
}
/**
* Gets whether the header will be modified when selecting on nominal
* attributes.
*
* @return true if so.
*/
public boolean getModifyHeader() {
return m_ModifyHeader;
}
/**
* Sets whether the header will be modified when selecting on nominal
* attributes.
*
* @param newModifyHeader true if so.
*/
public void setModifyHeader(boolean newModifyHeader) {
m_ModifyHeader = newModifyHeader;
}
/**
* Get the attribute to be used for selection (-1 for last)
*
* @return the attribute index
*/
public int getAttributeIndex() {
return m_AttributeSet;
}
/**
* Sets attribute to be used for selection
*
* @param attribute the attribute's index (-1 for last);
*/
public void setAttributeIndex(int attribute) {
m_AttributeSet = attribute;
}
/**
* Get the split point used for numeric selection
*
* @return the numeric split point
*/
public double getSplitPoint() {
return m_Value;
}
/**
* Split point to be used for selection on numeric attribute.
*
* @param value the split point
*/
public void setSplitPoint(double value) {
m_Value = value;
}
/**
* Gets whether missing values are counted as a match.
*
* @return true if missing values are counted as a match.
*/
public boolean getMatchMissingValues() {
return m_MatchMissingValues;
}
/**
* Sets whether missing values are counted as a match.
*
* @param newMatchMissingValues true if missing values are counted as a match.
*/
public void setMatchMissingValues(boolean newMatchMissingValues) {
m_MatchMissingValues = newMatchMissingValues;
}
/**
* Get whether the supplied columns are to be removed or kept
*
* @return true if the supplied columns will be kept
*/
public boolean getInvertSelection() {
return m_Values.getInvert();
}
/**
* Set whether selected values should be removed or kept. If true the
* selected values are kept and unselected values are deleted.
*
* @param invert the new invert setting
*/
public void setInvertSelection(boolean invert) {
m_Inverse = invert;
m_Values.setInvert(invert);
}
/**
* Get the set of nominal value indices that will be used for selection
*
* @return rangeList a string representing the list of nominal indices.
*/
public String getNominalIndices() {
return m_Values.getRanges();
}
/**
* Set which nominal labels are to be included in the selection.
*
* @param rangeList a string representing the list of nominal indices.
* eg: first-3,5,6-last
* @exception InvalidArgumentException if an invalid range list is supplied
*/
public void setNominalIndices(String rangeList) {
m_Values.setRanges(rangeList);
}
/**
* Set which values of a nominal attribute are to be used for
* selection.
*
* @param values an array containing indexes of values to be
* used for selection
* @exception InvalidArgumentException if an invalid set of ranges is supplied
*/
public void setNominalIndicesArr(int [] values) {
String rangeList = "";
for(int i = 0; i < values.length; i++) {
if (i == 0) {
rangeList = "" + (values[i] + 1);
} else {
rangeList += "," + (values[i] + 1);
}
}
setNominalIndices(rangeList);
}
/**
* Main method for testing this class.
*
* @param argv should contain arguments to the filter:
* use -h for help
*/
public static void main(String [] argv) {
try {
if (Utils.getFlag('b', argv)) {
Filter.batchFilterFile(new InstanceFilter(), argv);
} else {
Filter.filterFile(new InstanceFilter(), argv);
}
} catch (Exception ex) {
log.error(ex.getMessage());
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -