code: private Frame closeFrame(Key key, String[] names, String[][] domains, Futures fs) {
      if( _output_types == null ) return null;
      final int noutputs = _output_types.length;
      Vec[] vecs = new Vec[noutputs];
      if( _appendables==null || _appendables.length == 0)  // Zero rows?
        for( int i = 0; i < noutputs; i++ )
          vecs[i] = _fr.anyVec().makeZero();
      else {
        int rowLayout = _appendables[0].compute_rowLayout();
        for( int i = 0; i < noutputs; i++ ) {
          _appendables[i].setDomain(domains==null ? null : domains[i]);
          vecs[i] = _appendables[i].close(rowLayout,fs);
        }
      }
      return new Frame(key,names,vecs);
    }
docs: the work-horse for the outputFrame calls