def to_csv(columns: nil, &block)
      columns = columns&.map(&:to_sym)
      @header.to_csv(columns: columns) + @rows.to_csv(columns: columns, &block)
    end
def to_csv(columns: nil, &block)
      columns = columns&.map(&:to_sym)
      @header.to_csv(columns: columns) + @rows.to_csv(columns: columns, &block)
    end
Convert matrix to CSV-string.
 @param columns [Array<Symbol>, Set<Symbol>, NilClass]
   the columns to output, nil means all columns (default: nil)
 @yield [row]
   The given block will be passed for every row - return truthy if you want the
   row to be included in the output
 @yieldparam [Row] row
 @return [String] CSV-string representation.
 @example with selected columns
   matrix.to_csv(columns: [:id, :country])
 @example with selected rows
   matrix.to_csv { |row| row.country == 'Sweden' }
 @example with both selected columns and rows
   matrix.to_csv(columns: [:id, :country]) { |row| row.country == 'Sweden' }