package water.rapids.ast.prims.mungers; import hex.Model; import water.DKV; import water.Iced; import water.Key; import water.fvec.Frame; import water.rapids.Env; import water.rapids.ast.AstRoot; import water.rapids.vals.ValNum; import water.rapids.ast.AstPrimitive; /** */ public class AstRename extends AstPrimitive { @Override public String[] args() { return new String[]{"oldId", "newId"}; } @Override public int nargs() { return 1 + 2; } // (rename oldId newId) @Override public String str() { return "rename"; } @Override public ValNum apply(Env env, Env.StackHelp stk, AstRoot[] asts) { Key oldKey = Key.make(env.expand(asts[1].exec(env).getStr())); Key newKey = Key.make(env.expand(asts[2].exec(env).getStr())); Iced o = DKV.remove(oldKey).get(); if (o instanceof Frame) DKV.put(newKey, new Frame(newKey, ((Frame) o)._names, ((Frame) o).vecs())); else if (o instanceof Model) { ((Model) o)._key = newKey; DKV.put(newKey, o); } else throw new IllegalArgumentException("Trying to rename Value of type " + o.getClass()); return new ValNum(Double.NaN); } }