anchor.diff:    /// Missing data for a column will be assigned `null`.
     ///
     ///
  -  Table.from(Iterable<Map> rows, {bool colnamesFromFirstRow: true}) {
  +  Table.from(Iterable<Map> rows, {bool colnamesFromFirstRow = true}) {
       if (colnamesFromFirstRow) {
         _colnames = rows.first.keys.map((e) => e.toString()).toList();
       } else {
         // it's easiest to traverse twice -- unfortunately
  -      var _names = new Set<String>();
  +      var _names = <String>{};
         rows.forEach((Map row) =>
           _names = _names.union(row.keys.map((e) => e.toString()).toSet()));
         _colnames = _names.toList();
       }
  -    _colnames.forEach((name) => _data.add(new Column([], name)));
  -    Map _ind = new Map.fromIterables(
  -        _colnames, new List.generate(_colnames.length, (i) => i));
  +    _colnames.forEach((name) => _data.add(Column([], name)));
  +    var _ind = Map.fromIterables(
  +        _colnames, List.generate(_colnames.length, (i) => i));
   
       if (_fillValue == null) {
         rows.forEach((Map row) {
  
positive.code:     return res;
    }
  
    /**
     * Get the distinct rows in the table.
     *
     * You can restrict which columns you want to show the distinct values
     * by specifying the [columnNames] list.
     */
    Table distinct({List<String> columnNames}) {
      var uRows = new LinkedHashSet(
          equals: _rowEquality.equals,
          isValidKey: _rowEquality.isValidKey,
          hashCode: (e) => _rowEquality.hash(e));
      if (columnNames == null) {
        for (int i = 0; i < nrow; i++) uRows.add(row(i));
      } else {
        Map aux = {};
        for (int i = 0; i < nrow; i++) {
          Map rowi = row(i);
          columnNames.forEach((name) => aux[name] = rowi[name]);
          uRows.add(aux);
        }
      }
  
      return new Table.from(uRows.toList());
    }
  
    /**
     * Make a copy of this table.
     */
    Table copy() {
      Table t = new Table();
      for (int j = 0; j < ncol; j++)
        t.addColumn(new List.from(column(j).data), name: colnames[j]);
  
      return t;
    }
  
    /**
     * Column bind this table with another table.  Row numbers need to match.
     * If a column in the other table has the same name as a column in this table,
     * the column name gets prepended with '_Y'.
     */
    Table cbind(Table other) {
      if (nrow != other.nrow)
        throw 'Cannot cbind as tables don\'t have the same number of rows!';
  
negative.code:     }
    }
  
    /// Get the row i of the table as a Map.
    Map row(int i) {
      var res = {};
      for (var j = 0; j < ncol; j++) {
        res[_colnames[j]] = column(j).data[i];
      }
  
      return res;
    }
  
    /// Get column i.
    Column column(int j) => _data[j];
  
    Column operator [](String columnName) => _data[_colnames.indexOf(columnName)];
  
    /// Get the number of rows in the table.
    int get nrow => (_data.isEmpty) ? 0 : _data.first.data.length;
  
    /// Get the number of columns in the table.
    int get ncol => (_colnames.isEmpty) ? 0 : _colnames.length;
  
    /// Return the names of table columns as a List.
    List<String> get colnames => _colnames;
  
    /// Check if the table is empty.  You can have columns set up, but no data in them.
    bool get isEmpty => (nrow == 0) ? true : false;
  
    /// Change the name of column [i] to [name].
    /// Throws if name is already taken.
    void setColname(int j, String name) {
      if (_colnames.contains(name)) {
        throw 'Column ${name} already exists';
  