package water.rapids.ast.prims.mungers; import water.fvec.Frame; import water.fvec.Vec; import water.rapids.Env; import water.rapids.ast.AstPrimitive; import water.rapids.ast.AstRoot; import water.rapids.vals.ValRow; /** */ public class AstGetrow extends AstPrimitive { @Override public String[] args() { return new String[]{"frame"}; } @Override public int nargs() { return 1 + 1; } @Override public String str() { return "getrow"; } @Override public String example() { return "(getrow frame)"; } @Override public String description() { return "For a single-row frame, this function returns the contents of that frame as a ValRow. " + "All non-numeric and non-time columns will be converted into NaNs. " + "This function does not work for frames that have more than 1 row."; } @Override public ValRow apply(Env env, Env.StackHelp stk, AstRoot asts[]) { Frame fr = stk.track(asts[1].exec(env)).getFrame(); if (fr.numRows() != 1) throw new IllegalArgumentException("The frame should have only 1 row; found " + fr.numRows() + " rows."); double[] res = new double[fr.numCols()]; for (int i = 0; i < res.length; i++) { Vec v = fr.vec(i); res[i] = v.isNumeric()? v.at(0) : v.isTime()? v.at8(0) : Double.NaN; } return new ValRow(res, null); } }