Changes in 2.13.2 (2013-06-28)
------------------------------

Enhancements:

- Simplify ll() by converting a passed list to an environment,
  avoiding the need for special casing and the use of attach/detach.

- Working of deprecation warning message in aggregate.table clarified.

Changes in 2.13.1 (2013-03-24)
------------------------------

Enhancements:

- Replaced calls to depreciated function ".path.package" with the new
  public function "path.package".


Changes in 2.13.0 (2012-09-20)
-----------------------------

New features:

- New 'duplicated2' function which returns TRUE for *all* elements
  that are duplicated, including the first, contributed by Liviu
  Andronic.  This differs from 'duplicated', which only returns the
  second and following (second-to last and previous when
  'fromLast=TRUE') duplicate elements.

- New 'ans' functon to return the value of the last evaluated
  top-level function (a convenience function for accessing
  .Last.value), contributed by Liviu Andonic.

Bug Fixes:

- On windows, warning messages printed to stdout by perl were being
  included in the return value from 'system', resulting in errors in
  'sheetCount' and 'sheetNames'.  Corrected.

- The 'MedUnits' column names 'SIUnits' and 'ConventionalUnits' were
  reversed and misspelled.


Changes in 2.12.0 (2012-09-12)
------------------------------

Other Changes:

- 'stats::aggregate' was made into a generic on 27-Jan-2010, so that
   attempting to call 'aggregate' on a 'table' object will now
   incorrectly call 'aggregate.table'.  Since 'aggregate.table' can be
   replaced by a call to tapply using two index vectors, e.g.
       aggregate.table(x, by1=a, by2=b, mean)
   can be replaced by
       tapply(x, INDEX=list(a, b), FUN=mean),
   the 'aggregate.table' function will now display a warning that it
   is depreciated and recommending the equivalent call to tapply. It
   will be removed entirely in a future version of gdata.

Changes in 2.11.1 (2012-08-22)
------------------------------

Enhancements:

- read.xls() now supports fileEncoding argument to allow non-ascii
  encoded data to be handled.  See the manual page for an example.

Bug Fixes:

- The perl script utilized by read.xls() was incorrectly appending a
  space character at the end of each line, causing problems with
  character and NA entries in the final column.


Changes in 2.11.0 (2012-06-18)
------------------------------

New Features:

- read.xls() and supporting functions now allow blank lines to be
  preserved, rather than skipped, by supplying the argument
  "blank.lines.skip=FALSE". The underlying perl function has been
  extended to suppor this via an optional "-s" argument which, when
  present, *preserves* blank lines during the conversion.  (The
  default behavior remains unchanged.)

Other Changes:

- Add SystemRequirements field specifying that perl is necessary for
  gdata to function fully.


Changes in 2.10.6 (2012-06-12)
------------------------------

Bug fixes:

- gdata::nobs.default() needs to handle logical vectors in addition to
  numeric vectors.

Changes in 2.10.{3,4,5} (2012-06-08)
------------------------------------

Bug fixes:

- Mark example for installXLSsupport() as dontrun so R CMD check won't
  fail on systems where PERL is not fully functional.

- Correct name of installXLSsupport() in tests/test.read.xls.R.

Other Changes:

- Add dependency on R 2.13.0, since that is when stats::nobs appeared.


Changes in 2.10.2 (2012-06-06)
---------------------------------------

Bug fixes:

- Fix issues in nobs.default identified in testing with the gmodels package.


Changes in 2.10.1 (2012-06-06)
------------------------------

Bug fixes:

- Undo removal of 'nobs' and 'nobs.lm'.  Instead define aliases for
  'nobs' and 'nobs.lm' to support backward compatibility for packages
  depending on gdata.


Changes in 2.10.0 (2012-06-05)
------------------------------

New features:

- New ls.funs() function to list all objects of class function in the
  specified environment.

- New startsWith() function to determine if a string "starts with" the
  specified characters.


Enhancements:

- Add 'na.strings' argument to read.xls() to convert Excel's '#DIV/0!' to NA.


Bug fixes:

- Correct various R CMD check warnings


Other changes:

- Base S3 method for nobs() and nobs.lm() method removed since these
  are now provided in the stats package.


Changes in 2.9.0 (2011-09-30)
-----------------------------

New features:

- Add centerText() function to center text strings for a specified
  width.

- Add case() function, a vectorized variant of the base::switch()
  function, which is useful for converting numeric codes into factors.

Enhancements:

- Minor improvements to xls2csv() man page.

CHANGES IN 2.8.1 (2011-04-15)
-----------------------------

Enhancements:

- nPairs() gains a summary method that shows how many times each variable
  is known, while the other variable of a pair is not

Bug fixes:

- Fix errors on windows when R or Perl install path includes spaces by properly quoting the path.


CHANGES IN 2.8.1 (2010-11-12)
-----------------------------

Enhancements:

- Minor improvement to Args(), read.xls() man page.

Bug fixes:

- Modify write.fwf() to capture and pass on additional arguments for
  write.table(). This resolves a bug reported by Jan Wijffels.

- Modify xls2sep.R to avoid use of file.access() which is unreliable
  on Windows network shares.


CHANGES IN 2.8.0 (2010-04-03)
-----------------------------

Enhancements:

- When loaded, gtools (via an .onAttach() function) now checks:
   1) if perl is available
   2) whether the perl libraries for XLS support are available
   3) whether the perl libraries for XLSX support are available

  If perl is not available, an appropriate warning message is displayed.

  If necessary perl libraries are not available, a warning message is
  displayed, as is a message suggesting the user run the (new)
  installXLSXsupport() function to attempt to install the necessary
  perl libraries.

- The function installXLSXsupport() has been provided to install the
  binary perl modules that read.xls needs to support Excel 2007+
  'XLSX' files.


CHANGES IN 2.7.3 (2010-04-02)
-----------------------------

Enhancements:

- New xlsFormats() command to determine which Excel formats are
  supported (XLS, XLSX).

Bug Fixes:

- No longer attempt to install perl modules Compress::Raw::Zlib and
  Spreadsheet::XLSX at build/compile time.  This should resolve recent
  build issues, particularly on Windows.

- All perl code can now operate (but generate warnings) when perl modules Compress::Raw::Zlib and
  Spreadsheet::XLSX when are not installed.

- Also update Greg's email address.

CHANGES IN 2.7.1 (2010-02-19)
-----------------------------

Enhancements:

- on Windows attempts to locate ActiveState perl if perl= not specified and
  Rtools perl would have otherwise been used in read.xls and other perl
  dependent functions.

CHANGES IN 2.7.0 (2010-01-25)
-----------------------------

Bug Fixes:

- Fix building of Perl libraries on Win32


CHANGES IN 2.7.0 (2010-01-25)
-----------------------------

Enhancements:

- read.xls() now supports Excel 2007 'xlsx' files.

- read.xls() now allows specification of worksheet by name

- read.xls() now supports ftp URLs.

- Improved ll() so user can limit output to specified classes



New Functions:

- sheetCount() and sheetNames() to determine the number and names of
  worksheets in an Excel file, respectively.

Bug Fixes:

- Fix formatting warning in frameApply().

- Resolve crash of "ll(.GlobalEnv)"

-

CHANGES IN 2.6.1 (2009-07-15)
-----------------------------

Bug Fixes

- Modify unit tests to avoid issues related to time zones.


CHANGES IN 2.6.0 (2009-07-15)
-----------------------------

Bug Fixes

- Correct minor typos & issues in man pages for write.fwf(),
  resample() (Greg Warnes)

- Correct calculation of object sizes in env() and ll() (Gregor Gorjanc)

New Features

- Add support for using tab for field separator during translation
  from xls format in read.xls (Greg Warnes)

- Enhanced function object.size that returns the size of multiple
  objects. There is also a handy print method that can print size of
  an object in "human readable" format when
    options(humanReadable=TRUE)
  or
    print(object.size(x), humanReadable=TRUE).
  (Gregor Gorjanc)

- New function wideByFactor that reshapes given dataset by a given
  factor - it creates a "multivariate" data.frame. (Gregor Gorjanc)

- New function nPairs that gives the number of variable pairs in a
  data.frame or a matrix. (Gregor Gorjanc)

- New functions getYear, getMonth, getDay, getHour, getMin, and getSec
  for extracting the date/time parts from objects of a date/time
  class. (Gregor Gorjanc)

- New function bindData that binds two data frames into a multivariate
  data frame in a different way than merge. (Gregor Gorjanc)

Other Changes

- Correct Greg's email address


CHANGES IN 2.5.0
----------------

- New function .runRUnitTestsGdata that enables run of all RUnit tests during
  the R CMD check as well as directly from within R.

- Enhanced function object.size that returns the size of multiple objects. There
  is also a handy print method that can print size of an object in "human readable"
  format when options(humanReadable=TRUE) or print(x, humanReadable=TRUE).

- New function bindData that binds two data frames into a multivariate data frame
  in a different way than merge.

- New function wideByFactor that reshapes given dataset by a given factor -
  it creates a "multivariate" data.frame.

- New functions getYear, getMonth, getDay, getHour, getMin, and getSec for
  extracting the date/time parts from objects of a date/time class.

- New function nPairs that gives the number of variable pairs in a data.frame
  or a matrix.

- New function trimSum that sums trimmed values.

- New function cbindX that can bind objects with different number of rows.

- write.fwf gains the width argument. The value for unknown can increase or
  decrease the width of the columns. Additional tests and documentation fixes.

CHANGES IN 2.4.2 (2008-05-11)
-----------------------------

- Enhancements and bug fixes for read.xls() and xls2csv():

    - More informative log messages when verbose=TRUE

    - File paths containing spaces or other non-traditional characters
      are now properly handled

    - Better error messages, particularly when perl fails to generate
      an output .csv file.

    - The 'shortcut' character "~" (meaning user's home directory) is
      now properly handled in file paths.

    - XLS files created by OpenOffice are now properly handled.  Thanks to
       Robert Burns for pointing out the patch
       (http://rt.cpan.org/Public/Bug/Display.html?id=7206)

CHANGES IN 2.4.1 (2008-03-24)
-----------------------------

- Update perl libraries needed by xls2csv() and read.xls()
  to latest available versions on CRAN.

- Add read.xls() to exported function list

- Correct iris.xls example file.  It didn't contain the complete
  & properly formatted iris data set. Fixed.

- Fix typo in win32 example for read.xls()

CHANGES IN 2.4.0 (2008-01-30)
-----------------------------

- The keep() function now includes an 'all' argument to specify how
  objects with names starting with '.' are handled.

- keep() now shows an informative warning message when a requested
  object does not exist

- New vignette "Mapping Levels of a Factor" describing the use of
  mapLevels().

- New vignette "Working with Unknown Values" describing the use of
  isUnknown() and unknownToNA().

- Several enhancements to read.xls() (thanks to Gabor Grothendieck):

  - New function xls2csv(), which handles converting an xls file
    to a csv file and returns a connection to the
    temporary csv file

  - xls2csv() and read.xls() both allow a file or a url to be specified

  - read.xls() has a new 'pattern' argument which, if supplied,
    will ignore everything prior to the first line in th csv file
    that matches the pattern.  This is typically used if there
    are a variable number of comment lines prior to the header
    in which case one can specify one of the column
    headings as the pattern.  read.xls should
    be compatible with the old read.xls.

- Minor fixes to drop.levels(), is.what().

- Implementation of unit tests for most functions.

CHANGES IN 2.3.1 (2006-10-29)
-----------------------------

- Arguments as well as their position of reorder.factor have been changed
  to conform with reorder.factor method in stats package, due to collision
  bug. Argument 'make.ordered' is now 'order' and old argument 'order' is
  now 'new.order'! Therefore, you have to implicitly specify new.order i.e.

  reorder(trt, new.order=c("PLACEBO", "300 MG", "600 MG", "1200 MG"))

- trim() gains ... argument.

- Added "unknown" methods for matrices.

- Added c() method for factors based on mapLevels() functions.

- Added write.fwf, which writes file in *F*ixed *W*idth *F*ormat.

CHANGES FROM 2.1.X to 2.3.0 (2006-09-19)
---------------------------------------

- Added mapLevels(), which produces a map with information on levels and/or
  internal integer codes.  Contributed by Gregor Gorjanc.

- Extended dropLevels() to work on the factors contained in a data
  frame, as well as individual factors.

- Add unknown(), which changes given unknown value to NA and vice
  versa. Contributed by Gregor Gorjanc.

- Extended trim() to handle a variety of data types data.frames,
  lists, factors, etc.  Code changes contributed by Gregor Gorjanc.

- Added resample() command that acts like sample() except that it
  _always_ samples from the arguments provided, even if only a single
  argument is present.  This differs from sample() which behaves
  differently in this case.

- Updated my email address.

CHANGES IN GDATA 2.1.2
-----------------------

 - Fixed bug in interleave.R - option to covert 1-column matrices to
   vector (based on Andrew Burgess's suggestion)

 - Updated Greg and Jim's email adresses

 - ll.R: Suppressed warning message in attach() call.

 - frameApply.Rd, reorder.Rd: Remove explicit loading of
   gtools in examples, so that failure to import functions from
   gtools gets properly caught by running the examples.

 - upperTriangle.R, man/upperTriangle.Rd: Add functions for
   extracting and modifying the upper and lower trianglular components of
   matrices.

 - is.what.R: Replaced the "not.using" vector with a more robust
   try(get(test)) to find out whether a particular is.* function
   returns a logical of length one.

-  DESCRIPTION: Added Suggests field

-  Updated the example in frameApply


CHANGES IN GDATA 2.0.8
-----------------------

 - Added DESCRIPTION and removed DESCRIPTION.in

 - Updated ll.Rd documentation

 - Fixed bug in Args.R, is.what.R, ll.R
