package water.rapids.vals;
import water.rapids.Val;
import java.util.Arrays;
/**
* Row (array) of numbers.
*/
public class ValRow extends Val {
private final double[] _ds;
private final String[] _names;
public ValRow(double[] ds, String[] names) {
_ds = ds;
_names = names;
if (ds != null && names != null && ds.length != names.length)
throw new IllegalArgumentException("Lengths of data and names mismatch: " +
Arrays.toString(ds) + " and " + Arrays.toString(names));
}
@Override public int type() { return ROW; }
@Override public boolean isRow() { return true; }
@Override public double[] getRow() { return _ds; }
@Override public double[] getNums() { return _ds; }
@Override public String toString() { return Arrays.toString(_ds); }
public String[] getNames() {
return _names;
}
/**
* Creates a new ValRow by selecting elements at the specified indices.
* @param cols array of indices to select. We do not check for AIOOB errors.
* @return new ValRow object
*/
public ValRow slice(int[] cols) {
double[] ds = new double[cols.length];
String[] ns = new String[cols.length];
for (int i = 0; i < cols.length; ++i) {
ds[i] = _ds[cols[i]];
ns[i] = _names[cols[i]];
}
return new ValRow(ds, ns);
}
}