/** * Parses a given list of options. * * <p> * <!-- options-start --> * Valid options are: * * <p> * * <pre> -R <col> * Sets the range of attribute indices (default last).</pre> * * <pre> -V <col> * Inverts the selection specified by -R.</pre> * * <!-- options-end --> * * @param options the list of options as an array of strings * @throws Exception if an option is not supported */ public void setOptions(String[] options) throws Exception { String attIndices = Utils.getOption('R', options); if (attIndices.length() != 0) { setAttributeRange(attIndices); } else { setAttributeRange("last"); } String invertSelection = Utils.getOption('V', options); if (invertSelection.length() != 0) { m_AttIndices.setInvert(true); } else { m_AttIndices.setInvert(false); } if (getInputFormat() != null) { setInputFormat(getInputFormat()); } }
/** * Sets the format of the input instances. * * @param instanceInfo an Instances object containing the input instance structure (any instances * contained in the object are ignored - only the structure is required). * @return true if the outputFormat may be collected immediately * @throws Exception if the format couldn't be set successfully */ public boolean setInputFormat(Instances instanceInfo) throws Exception { super.setInputFormat(instanceInfo); m_Insert.setUpper(instanceInfo.numAttributes()); Instances outputFormat = new Instances(instanceInfo, 0); Attribute newAttribute = null; switch (m_AttributeType) { case Attribute.NUMERIC: newAttribute = new Attribute(m_Name); break; case Attribute.NOMINAL: newAttribute = new Attribute(m_Name, m_Labels); break; case Attribute.STRING: newAttribute = new Attribute(m_Name, (FastVector) null); break; case Attribute.DATE: newAttribute = new Attribute(m_Name, m_DateFormat); break; default: throw new IllegalArgumentException("Unknown attribute type in Add"); } if ((m_Insert.getIndex() < 0) || (m_Insert.getIndex() > getInputFormat().numAttributes())) { throw new IllegalArgumentException("Index out of range"); } outputFormat.insertAttributeAt(newAttribute, m_Insert.getIndex()); setOutputFormat(outputFormat); // all attributes, except index of added attribute // (otherwise the length of the input/output indices differ) Range atts = new Range(m_Insert.getSingleIndex()); atts.setInvert(true); atts.setUpper(outputFormat.numAttributes() - 1); initOutputLocators(outputFormat, atts.getSelection()); return true; }
/** * Sets whether selected columns should be processed or skipped. * * @param value the new invert setting */ public void setInvertSelection(boolean value) { m_AttributeIndices.setInvert(value); }
/** * Sets the format of the input instances. * * @param instanceInfo an Instances object containing the input instance structure (any instances * contained in the object are ignored - only the structure is required). * @return true if the outputFormat may be collected immediately * @throws Exception if the format couldn't be set successfully */ @Override public boolean setInputFormat(Instances instanceInfo) throws Exception { super.setInputFormat(instanceInfo); int classIndex = instanceInfo.classIndex(); // setup the map if (m_renameVals != null && m_renameVals.length() > 0) { String[] vals = m_renameVals.split(","); for (String val : vals) { String[] parts = val.split(":"); if (parts.length != 2) { throw new WekaException("Invalid replacement string: " + val); } if (parts[0].length() == 0 || parts[1].length() == 0) { throw new WekaException("Invalid replacement string: " + val); } m_renameMap.put( m_ignoreCase ? parts[0].toLowerCase().trim() : parts[0].trim(), parts[1].trim()); } } // try selected atts as a numeric range first Range tempRange = new Range(); tempRange.setInvert(m_invert); if (m_selectedColsString == null) { m_selectedColsString = ""; } try { tempRange.setRanges(m_selectedColsString); tempRange.setUpper(instanceInfo.numAttributes() - 1); m_selectedAttributes = tempRange.getSelection(); m_selectedCols = tempRange; } catch (Exception r) { // OK, now try as named attributes StringBuffer indexes = new StringBuffer(); String[] attNames = m_selectedColsString.split(","); boolean first = true; for (String n : attNames) { n = n.trim(); Attribute found = instanceInfo.attribute(n); if (found == null) { throw new WekaException( "Unable to find attribute '" + n + "' in the incoming instances'"); } if (first) { indexes.append("" + (found.index() + 1)); first = false; } else { indexes.append("," + (found.index() + 1)); } } tempRange = new Range(); tempRange.setRanges(indexes.toString()); tempRange.setUpper(instanceInfo.numAttributes() - 1); m_selectedAttributes = tempRange.getSelection(); m_selectedCols = tempRange; } ArrayList<Attribute> attributes = new ArrayList<Attribute>(); for (int i = 0; i < instanceInfo.numAttributes(); i++) { if (m_selectedCols.isInRange(i)) { if (instanceInfo.attribute(i).isNominal()) { List<String> valsForAtt = new ArrayList<String>(); for (int j = 0; j < instanceInfo.attribute(i).numValues(); j++) { String origV = instanceInfo.attribute(i).value(j); String replace = m_ignoreCase ? m_renameMap.get(origV.toLowerCase()) : m_renameMap.get(origV); if (replace != null && !valsForAtt.contains(replace)) { valsForAtt.add(replace); } else { valsForAtt.add(origV); } } Attribute newAtt = new Attribute(instanceInfo.attribute(i).name(), valsForAtt); attributes.add(newAtt); } else { // ignore any selected attributes that are not nominal Attribute att = (Attribute) instanceInfo.attribute(i).copy(); attributes.add(att); } } else { Attribute att = (Attribute) instanceInfo.attribute(i).copy(); attributes.add(att); } } Instances outputFormat = new Instances(instanceInfo.relationName(), attributes, 0); outputFormat.setClassIndex(classIndex); setOutputFormat(outputFormat); return true; }
/** * Sets whether selected columns should be removed or kept. If true the selected columns are kept * and unselected columns are deleted. If false selected columns are deleted and unselected * columns are kept. * * @param invert the new invert setting */ public void setInvertSelection(boolean invert) { m_DiscretizeCols.setInvert(invert); }
/** * Sets whether selected columns should be worked on or all the others apart from these. If true * all the other columns are considered for "nominalization". * * @param value the new invert setting */ public void setInvertSelection(boolean value) { m_Cols.setInvert(value); }
/** * Set whether selected columns should be select or unselect. If true the selected columns are * modified. If false the selected columns are not modified. * * @param invert the new invert setting */ public void setInvertSelection(boolean invert) { m_SelectCols.setInvert(!invert); }