Package: R.filesets
===================

Version: 1.9.0 [2012-12-20]
o Argument 'colClassPatterns' of readDataFrame() for TabularTextFile
  has been renamed to 'colClasses'.


Version: 1.8.2 [2012-12-19]
o Bumped up package dependencies.
o Utilizing new startupMessage() of R.oo.
o ROBUSTNESS: Now indexOf() for GenericDataFileSet throws an 
  exception if use tries to pass an argument 'names'.


Version: 1.8.1 [2012-12-09]
o Added head() and tail() for GenericTabularFile.
o Added subsetting via [() to GenericTabularFile.
o BUG FIX: nbrOfRows() for TabularTextFile forgot to exclude comment
  rows in the file header.
o BUG FIX: readColumns() for GenericTabularFile would not preserve
  the order of the requested 'columns'.


Version: 1.8.0 [2012-12-06]
o Added getOneFile() for GenericDataFileSet, which returns the first
  GenericDataFile with a non-missing pathname.
o Added argument 'absolute=FALSE' to getPathname() for GenericDataFile.
o ROBUSTNESS: Now GenericDataFile stores the absolute pathname of
  the file, even if a relative pathname is given.  This makes sure
  that the file is found also when the working directory is changed.
o BUG FIX: equals() for GenericDataFileSet would only compare the first
  GenericDataFile in each set.


Version: 1.7.3 [2012-12-03]
o Added isGzipped() to GenericDataFile.


Version: 1.7.2 [2012-12-03]
o Generalized writeColumnsToFiles() to GenericTabularFile.  Used
  to be available only for TabularTextFile.
o CLEANUP: Now package only imports 'digest' and 'R.methodsS3'.
  Added 'stats' to list of imported packages.
o ROBUSTNESS: Now package declares S3 methods in the namespace.


Version: 1.7.1 [2012-12-02]
o BUG FIX: getDefaultColumnNames() for TabularTextFile did not use
  'columnNames' if it was set when creating the TabularTextFile object.
o BUG FIX: Now getReadArguments() for TabularTextFile drops arguments
  that are NULL, because they could cause errors downstreams, e.g.
  readDataFrame() calling read.table(..., colClasses=NULL) =>
  rep_len(NULL, x) => "Error in rep_len(colClasses, cols) :
  cannot replicate NULL to a non-zero length".


Version: 1.7.0 [2012-11-30]
o Updated as.list() for GenericDataSet to return a *named* list of 
  GenericDataFile:s (previously it had no names).  The names are
  the (translated) full names of the GenericDataFile:s.
o CLEANUP: Removed lapply() and sapply() for GenericDataSet because
  the corresponding functions in the 'base' package utilizes 
  as.list().


Version: 1.6.1 [2012-11-28]
o Now GenericDataFile() retrieves the file time stamps such that
  hasBeenModified() returns a correct value also when first called,
  and not only TRUE just in case.  This has the effect that
  getChecksum() will detected cached results already at the
  second call as long as the file has to been modified.  Previously
  it took two calls to getChecksum() for it to be properly cached.
o Now declaring more internal and temporary Object fields as "cached",
  which means they will be cleared if clearCache() or gc() is called on
  the corresponding object.
o Added further verbose output to TabularTextFileSet.
o DOCUMENTATION: Minor corrections to help pages.


Version: 1.6.0 [2012-11-15]
o No updates. Bumped the version for CRAN release.


Version: 1.5.4 [2012-11-15]
o BACKWARD COMPATIBILITY: Made it possible for TabularTextFile to ignore
  header comment arguments when inferring column names and classes.  


Version: 1.5.3 [2012-11-13]
o CLEANUP: Now clearCache() for GenericDataFileSet relies on ditto
  of Object to clear all cached fields (=with field modifier "cached").
o CLEANUP: Deprecated (get|set)Label() for GenericDataFile and
  (get|set)Alias() for GenericData(File|FileSet).  Related
  arguments such at 'alias' to GenericDataFileSet and 'aliased'
  to getDefaultFullName() for GenericDataFile are also deprecated.


Version: 1.5.2 [2012-11-12]
o CLEANUP: Now seq_along(x) instead of seq(along=x) everywhere.
  Similarly, seq(ds) where 'ds' is GenericDataFileSet is now
  replaced by seq_along(ds).  Likewise, seq_len(x) replaces 
  seq(length=x), and length(ds) replaces nbrOfFiles(ds).


Version: 1.5.1 [2012-11-08]
o Now TabularTextFile() tries to infer whether the data section
  contains column names or not.  This is done by comparing to
  the optional 'columnNames' header argument.  If that is not
  available, it will (as before) assume there are column names.
o Now readDataFrame() acknowledge header comment arguments 
  'columnNames' and 'columnClasses' if specified in the file.
o Now getDefaultColumnNames() for TabularTextFile falls back to 
  header comment argument 'columnNames', if there are no column
  names in the actual data table.
o Now readRawHeader() for TabularTextFile also parses and returns
  header comment arguments.


Version: 1.5.0 [2012-11-02]
o Added ColumnNamesInterface which GenericTabularFile now implements.
  Classes inheriting from GenericTabularFile should rename any
  getColumnNames() method to getDefaultColumnNames().
o CLEANUP: Replaced all whichVector() with which(), because the
  latter is now the fastest again.


Version: 1.4.2 [2012-11-01]
o Added setColumnNames() for GenericTabularFile, which utilizes
  setColumnNamesTranslator().
o CLEANUP: Deprecated (get|set)ColumnNameTranslator() in favor of
  (get|set)ColumnNamesTranslator(); note the plural form.


Version: 1.4.1 [2012-10-31]
o CLEANUP: readDataFrame() for TabularTextFile no longer returns
  attribute 'fileHeader', unless argument 'debug' is TRUE.


Version: 1.4.0 [2012-10-30]
o Added validate() to GenericDataFileSet, which iteratively calls
  validate() on all the GenericDataFile:s in the set.  The default
  is to return NA, indicating that no validation was done.


Version: 1.3.3 [2012-10-29]
o CLEANUP: Now using Arguments$getReadablePath() instead of
  filePath(..., expandLinks="any").


Version: 1.3.2 [2012-10-17]
o CLEANUP: Forgot to drop Arguments$getFilename() below.


Version: 1.3.1 [2012-10-16]
o ROBUSTNESS/BUG FIX: No longer passing '...' to NextMethod(), cf.
  R-devel thread 'Do *not* pass '...' to NextMethod() - it'll do it 
  for you; missing documentation, a bug or just me?' on Oct 16, 2012.


Version: 1.3.0 [2012-10-16]
o CLEANUP: Moved Arguments$getFilename() from this package to 
  R.utils v1.17.0.
o ROBUSTNESS: Bumped up package dependencies.


Version: 1.2.2 [2012-10-16]
o DOCUMENTATION: Added Rd help for a few more methods.
o CLEANUP: static fromFiles() for GenericDataFileSet is now defunct 
  in placefor byName(), which has been recommended since January 2010.


Version: 1.2.1 [2012-09-27]
o Now readDataFrame() for TabularTextFile defaults to read strings
  as characters rather than as factors.  To read strings as factors,
  just pass argument stringsAsFactors=TRUE.
o Added readDataFrame() for TabularTextFileSet.
o ROBUSTNESS: Now getHeader() for TabularTextFile checks if the
  file has been modified before returned cached results.


Version: 1.2.0 [2012-09-25]
o Now R.filesets imports R.methodsS3, R.oo and R.utils.
  This solves issues such as trim() being overridden by ditto 
  from the IRanges package, iff loaded.


Version: 1.1.6 [2012-09-01]
o CONSISTENCY: Now extractMatrix() for GenericTabularFile adds column 
  names just as ditto for GenericTabularFileSet does.


Version: 1.1.5 [2012-03-06]
o CRAN POLICY: Removed all internal copies of 'base' functions that
  have .Internal() calls.


Version: 1.1.4 [2011-11-19]
o Now more methods for GenericDataFile and GenericDataFileSet handle
  so called "empty" files, which are files with NULL pathnames.


Version: 1.1.3 [2011-09-26]
o Added methods set- and getCommentChar() to TabularTextFile and
  argument 'commentChar' to its constructor.  This allows to use
  custom comment characters other than just "#".


Version: 1.1.2 [2011-09-11]
o BUG FIX: GenericDataFileSet$byName(..., subdirs) would throw 'Error
  in strsplit(subdirs, split = "/\\")' iff subdirs != NULL.
o Improved the handling of the newly introduced 'depth' parameter,
  e.g. by making it optional/backward compatible.


Version: 1.1.1 [2011-07-25]
o Added "depth" to GenericDataFileSet, such that one can correctly
  infer fullname and subdirs from the path.


Version: 1.1.0 [2011-07-24]
o Added a namespace to the package, which will be more or less
  a requirement in the next major release of R.


Version: 1.0.4 [2011-07-15]
o Added argument 'named' to getTags() for FullNameInterface.  If TRUE,
  tags of format "<name>=<value>" will be parsed and returned as a
  named "<value>", e.g. "foo,n=23,bar,n=42" is returned as
  c("foo", "n"="23", "bar", "n"="42").


Version: 1.0.3 [2011-07-13]
o GENERALIZATION: Now readDataFrame(..., colClasses=..., trimQuotes=TRUE)
  of TabularTextFile will read numeric columns that are quoted.
  This is done by first reading them as quoted character strings,
  dropping the quotes, and then rereading them as numeric values.


Version: 1.0.2 [2011-05-23]
o Added argument '.fileClass' to appendFiles() for GenericDataFileSet.


Version: 1.0.1 [2011-05-16]
o ROBUSTNESS: Now appendFiles() for GenericDataFileSet asserts that all
  files to be appended are instances of the file class of this set as
  given by the static getFileClass().
o ROBUSTNESS: Added argument '.assertSameClass' to appendFiles()
  for GenericDataFileSet, which if TRUE asserts that the files to be 
  appended inherits from the same class as the existing files.
  Before this test was mandatory.


Version: 1.0.0 [2011-04-06]
o Added getChecksum() to GenericDataFileSet, which calculates the 
  checksum of the object returned by the protected getChecksumData().
  Use with care, because what objects should be the basis of the
  checksum is not clear, e.g. should it be only the file system
  checksum, or should things such as translated fullnames be included
  as well?


Version: 0.9.9 [2011-04-04]
o BUG FIX: equals() for GenericDataFile would consider two files not
  to be equal only if their checksums was equal, and vice versa.
  Also, when creating the message string explaining why they differ
  an error would have been thrown.


Version: 0.9.8 [2011-04-03]
o CLEANUP: Utilizing hpaste() internally wherever applicable.


Version: 0.9.7 [2011-03-11]
o ROBUSTNESS: Now appendFullNameTranslatorBy<what>() for <character>
  and <function> assert that the translator correctly returns exactly
  one string.  This has the effect that setFullName() and friends
  are also tested.


Version: 0.9.6 [2011-03-09]
o Added '=' to the list of safe characters for Arguments$getFilename().
o Added fullname(), name(), tags(), and dropTags().


Version: 0.9.5 [2011-02-27]
o BUG FIX: After the recent generalization of findByName() for
  GenericDataFileSet it would throw "<simpleError in paths[sapply(
  rootPaths, FUN = isDirectory)]: invalid subscript type 'list'>"
  in case no matching root path directories existed.


Version: 0.9.4 [2011-02-24]
o Added dropRootPathTags().
o GENERALIZATION: Added support to findByName() for GenericDataFileSet
  such that root paths also can be specified by simple regular expression
  (still via argument 'paths').  Currently it is only the last 
  subdirectory that can be expanded, e.g. foo/bar/data(,.*)/.


Version: 0.9.3 [2011-02-18]
o GENERALIZATION: Now byName() for GenericDataFileSet will try all
  possible data set directories located when trying to setup a data set.
  Before it only tried the first one located.  This new approach is
  equally fast for the first data set directory as before.  The advantage
  is that it adds further flexibilities, e.g. the first directory may
  not be what we want but the second, which can be further tested by
  the byPath() and downstream methods such as the constructor.
o ROBUSTNESS: Now writeColumnsToFiles() for TabularTextFile writes
  files atomically, which should minimize the risk for generating
  incomplete files.
o CLEANUP: Copied static getTags() for Arguments from aroma.core package.
o DEPRECATION: Added a warning message reporting that fromFiles() of
  GenericDataFileSet has been deprecated, if still called by someone.


Version: 0.9.2 [2011-02-14]
o GENERALIZATION: Now append() for GenericDataFileSet tries to also
  append non-GenericDataFileSet object by passing them down to
  appendFiles() assuming they are GenericDataFile:s.
o GENERALIZATION: Now appendFiles() for GenericDataFileSet also accepts
  a single item.  Thus, there is no longer a need to wrap up single
  items in a list.


Version: 0.9.1 [2010-11-19]
o ROBUSTNESS: Now GenericDataFileSet$byName() asserts that arguments
  'name' and 'tags' contain only valid characters.  This will for
  instance prevent passing paths or pathnames by mistake.
o Now appendFullNameTranslator(..., df) for FullNameInterface takes
  either 'pattern' or 'fixed' translations in data.frame.


Version: 0.9.0 [2010-08-19]
o Added sortBy() to GenericDataFileSet, which sorts files either
  in a lexicographic or a mixedsort order.
o DOCUMENTATION: Added more Rd help pages.
o DOCUMENTATION: Removed any duplicated \usage{} statements from
  the Rd documentation.


Version: 0.8.3 [2010-07-06]
o BUG FIX: indexOf() for GenericDataFileSet/List would return NA if
  the search pattern/string contained parentheses.  The reason is that
  such have a special meaning in regular expression.  Now indexOf()
  first search by regular expression patterns, then by fixed strings.
  Thanks Johan Staaf at Lund University and Larry(?) for reporting
  on this issue.


Version: 0.8.2 [2010-05-26]
o Now GenericDataFileSet$findByName(..., mustExist=FALSE) do no longer
  throw an exception even if there is no existing root path.
o Added argument 'firstOnly=TRUE' to findByName() for GenericDataFileSet.
o Added appendFullNameTranslatorBy...() methods to the
  FullNameInterface class for data frames, TabularTextFile:s, and
  TabularTextFileSet:s.


Version: 0.8.1 [2010-04-22]
o Added "NA" to the default 'na.strings' returned by getReadArguments()
  for TabularTextFile.


Version: 0.8.0 [2010-02-22]
o Submitted to CRAN.  No changes since v0.7.6.


Version: 0.7.6 [2010-02-13]
o Added argument '.onUnknownArgs' to GenericDataFile() and 
  GenericDataFileSet().  As before, the default is to throw an
  exception if there are unknown arguments.  However, in certain 
  case it is useful to allow (and ignore) "stray" arguments.


Version: 0.7.5 [2010-02-07]
o BUG FIX: indexOf() of GenericDataFileSet and GenericDataFileSetList
  did not handle names with regular expression symbols '+' and '*'. 
  Thanks to Randy Gobbel for the initial error report.


Version: 0.7.4 [2010-01-31]
o DOCUMENTATION: Added Rd help paged to more methods for classes
  GenericDataFile and GenericDataFileSet. 
o DEPRECATION: Deprecated static fromFiles() of GenericDataSet.  
  Use byPath() instead.


Version: 0.7.3 [2010-01-24]
o ROBUSTNESS: If argument 'files' is logical, then extract() of
  GenericDataFileSet and GenericDataFileSetList now asserts that the
  length of 'files' matches the number of available files.


Version: 0.7.2 [2010-01-12]
o Added some example data files under exData/.
o BUG FIX: readColumns(..., column=<string>) on a TabularTextFile 
  would give "Error ... object 'columnNames' not found".


Version: 0.7.1 [2010-01-02]
o Now setExtensionPattern(..., pattern=NULL) of GenericDataFile works.
o Added argument 'default="\\.([^.]+)$"' to getExtensionPattern() 
  of GenericDataFile.  Before the default value was hardcoded
  inside this function.


Version: 0.7.0 [2010-01-02]
o Added protected as.data.frame() to GenericDataFileSetList.
o Now GenericDataFile(NA, mustExist=FALSE) is a valid object.  
  Made all methods aware of such missing files.
o Now extract(ds, c(1,2,NA,4), onMissing="NA") returns a valid
  GenericDataFileSet where missing files are returned as missing
  GenericDataFile:s.
o Added na.rm=TRUE to all getTags() so that it returns NULL in case
  the file is missing.
o copyTo() of GenericDataFileSet quietly ignores missing files.
o Added Rd help for indexOf() of GenericDataFileSet.
o ROBUSTNESS: Using new Arguments$getInstanceOf() were possible.
o ROBUSTNESS: Now all index arguments are validated correctly 
  using the new 'max' argument of Arguments$getIndices().  Before
  the case where "max == 0" was not handled correctly.
o BUG FIX: Changed the default to 'parent=0' for getDefaultFullName() 
  of GenericDataFileSet to be consistent with the documentation.
o BUG FIX: Now GenericDataFile(pathname) throws an error if 'pathname'
  is referring to a directory.
o BUG FIX: getPath() and getDefaultFullName() of GenericDataFileSet 
  would return a *logical* instead of *character* value.
o BUG FIX: indexOf(ds, names) of GenericDataFileSet would return a
  *logical* instead of an *integer* vector of NA:s if none of the 
  names existed.


Version: 0.6.5 [2009-10-30]
o ROBUSTIFICATION: Now translateFullName() of FullNameInterface 
  and translateColumnNames() of GenericTabularFile throw an 
  exception if some fullnames were translated into NA.  They
  also assert that no names were dropped or added in the process.
o BUG FIX: After doing append() to a GenericDataFileSet, the
  total file size reported would remain the same.
o BUG FIX: Appending empty data sets using append() of GenericDataFileSet
  would give error Error in this$files[[1]] : subscript out of bounds.


Version: 0.6.4 [2009-10-25]
o Added get- and setExtensionPattern() to FullNameInterface.
o Added getExtension() to GenericDataFile.


Version: 0.6.3 [2009-10-23]
o Added appendFullNameTranslatorBylist() which makes it possible to do
  setup a sequence of fullnames translators fnt1, fnt2, fnt3 by calling
  setFullNameTranslator(..., list(fnt1, fnt2, fnt3)).


Version: 0.6.2 [2009-10-22]
o Added support for having a sequence of fullname translator 
  functions.  These can be added using appendFullNameTranslator().
o Added an example() to FullNameInterface.


Version: 0.6.1 [2009-10-06]
o Added subsetting via [() to TabularTextFile.


Version: 0.6.0 [2009-10-02]
o Added the FullNameInterface, which is the interface class that
  defines what fullnames, names, tags etc are.
o Now setFullName*s*Translator() for GenericDataFileSet dispatches 
  on the 'by' argument.  If that is not possible, it call 
  setFullNameTranslator() for each file in the set (as before).
o CLEAN UP: Renamed fromFiles() to byPath().  For backward 
  compatibility the former calls the latter. 
o CLEAN UP: GenericDataFile and GenericDataFileSet implements
  the FullNameInterface, which mean less redundant code.


Version: 0.5.3 [2009-08-12]
o Now findByName() of GenericDataFileSet follows Windows Shortcut 
  links also for subdirectories.


Version: 0.5.2 [2009-06-08]
o Analogously to the method for a GenericDataFile, the 
  setFullNameTranslator() method for GenericDataFileSet now
  assumes that the fullname translator function accepts also
  argument 'set'.
o Added argument '.fileSetClass' to GenericDataFileSet().


Version: 0.5.1 [2009-05-19]
o A fullname translator function for a GenericDataFile should accept
  any number of arguments.  The first argument will always be 
  (an unnamed) argument containing the name (or names) to be 
  translated.  If the translator is for a GenericDataFile, an
  additional argument 'file' will also be passed.  This allows
  the translator function to for instance read the file header
  and infer the name that way.


Version: 0.5.0 [2009-05-17]
o Extracted several classes and methods from the aroma.core package.
o Created package.
