private double meanOrMode(Instances instances, int [] instList,
protected double meanOrMode(Instances instances, int[] instList,
  private double meanOrMode(Instances instances, 			    int [] instList, 			    int attIndex) {    double result, found;    int [] counts;    int numInst = instList.length;    if (instances.attribute(attIndex).isNumeric()) {      result = found = 0;      for (int j = 0; j < numInst; j++) {	Instance currInst = instances.instance(instList[j]);	if (!currInst.isMissing(attIndex)) {	  found += currInst.weight();	  result += currInst.weight() * 	    currInst.value(attIndex);	}      }      if (Utils.eq(found, 0)) {	return 0;      } else {	return result / found;      }    } else if (instances.attribute(attIndex).isNominal()) {      counts = new int[instances.attribute(attIndex).numValues()];      for (int j = 0; j < numInst; j++) {	Instance currInst = instances.instance(instList[j]);	if (!currInst.isMissing(attIndex)) {	  counts[(int) currInst.value(attIndex)] += currInst.weight();	}      }      return (double)Utils.maxIndex(counts);    } else {      return 0;    }  }