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
