anchor.diff:      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.
  -   */
  +  /// 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(
  +    var uRows = 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));
  +      for (var i = 0; i < nrow; i++) {
  +        uRows.add(row(i));
  +      }
       } else {
  -      Map aux = {};
  -      for (int i = 0; i < nrow; i++) {
  -        Map rowi = row(i);
  +      var aux = {};
  +      for (var i = 0; i < nrow; i++) {
  +        var 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.
  -   */
  +    return 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]);
  +    var t = Table();
  +    for (var j = 0; j < ncol; j++) {
  +      t.addColumn(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'.
  -   */
  +  /// 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!';
  
positive.code:     return t;
    }
  
    /**
     * Row bind this table with another table.  It adds the observations from [other]
     * after the observations of this table.
     *
     * If [strict] is `true`, the column names must match exactly.
     *
     * If [strict] is `false`, new columns are created as needed and filled with `null`s.
     *
     * The columns of the [other] table don't have to be in the same order as the columns
     * of this table.
     */
    Table rbind(Table other, {bool strict: true}) {
      if (strict &&
          !_setEquality.equals(colnames.toSet(), other.colnames.toSet()))
  
negative.code:     return result;
    }
  
    /// Apply function [f] to different groups of rows.  Rows are grouped
    /// by the distinct values of the columns indicated by [groupBy].
    /// If [groupBy] is not specified, the function [f] is applied to
    /// each individual row.
    ///
    /// Function [f] takes an [Iterable] and returns a Map with String keys.
    /// The Map returned by [f] will be used to construct the [Table] returned.
    ///
    /// For example to calculate the sum by the [groupBy] variables,
    /// ```
    /// Function f = (Iterable<num> x) => x.reduce((a,b) => {'sum': a+b});
    /// ```
    Table groupApply(dynamic f(Iterable<dynamic> x), {List<String> groupBy, List<String> variables}) {
      var by = groupBy.where((e) => colnames.contains(e)).toList();
      List<String> vars = variables.where((e) => colnames.contains(e)).toList();
  