Changes since version 0.4 === * New features * `list.ungroup` now supports `level` arguments to `unlist` a nested list recursively. (#102) * `list.flatten` now accepts `classes` to filter list element recursively by class name. * `list.expand` implements a list version of `expand.grid` (#107) * Improvements * Support loading and parsing from xml to list. (#43) * `list.search` now uses `is.null` to clean the results. * Add `list.unzip` to `List` object. * `list.ungroup` now supports `group.names` to indicate whether to preserve group names. * Implement better error handling mechanism in `list.all`, `list.takeWhile`, `list.skipWhile`, etc. * `list.table` will directly call `table` upon input data if `...` is missing. * Bug fixes * Fix returned value of `list.unserialize`. * `list.skip` returns the original data when asked to skip 0 elements. * `list.skip` takes the first `n` elements when asked to skip a negative number of elements. * Fix bug in lambda expression handling of `list.all` (#105) Version 0.4 === * New features * Include a dataset `nyweather` scraped from [OpenWeatherMap](https://openweathermap.org/) (#2) * `list.load` now supports text-based progress bar when `progress = TRUE` which is by default enabled if over 5 files are to be loaded. (#92) * New function `list.names` gives a list or vector names by mapping. * New functions `list.first` and `list.last` find the first or last list element that meets a given condition. * New function `list.unzip` to transform a list of elements with similar structure into a list of decoupled fields. * Improvements * Add error handling in several edge cases. (#18) * `list.group` now supports grouping by multi-key which produces multi-level list. (#69) * `list.load` now supports loading from multiple filenames given in character vector. (#74) * `list.load` is now able to guess the file format even if the file type is not specified. (#76) * `list.maps` now allows the usage of `..1`, `..2`, etc. to refer to unnamed arguments. (#80) * `list.load` now supports merging and ungrouping as means to aggregating loaded results. (#82) * `list.stack` now uses `data.table::setDF` to convert `data.table` to `data.frame` if `data.table = FALSE`, which is done by reference and thus has higher performance. * Bug fixes * `list.search` now takes `n` as the number of returned vector rather than that of the elements in all returned vectors, and is now able to jump out when the result set reaches given capacity. (#47, #84) * Fix how `list.table` deals with `NULL` values. (#73) * Fix how wrapper functions deal with default arguments. (#75) * Fix the dynamic scoping issues in `list.table`. (#86) * `list.all` and `list.any` behave the same as `all` and `any` respectively when the input is empty. (#87) * One-sided formula does not result in error now. (#89) * `list.flatten` now preserves names as specified. (#90) * Fix incorrect processing for fallback in `list.findi`. (#91) * Fix the implementation in `list.group` working with multi-key. (#93) * Fix incorrect ordering if some entries are multi-valued vectors and others and single- valued. If `list.order` and `list.sort` encounter such situation, they now report error rather than silently produced unreliable results. (#94) * Fix inconsistencies in `list.all`, `list.any`, `list.first` and `list.last`. * Deprecation * `equal()` is removed and related packages are now suggested rather than imported. (#70) * `summary.list()` is deprecated. (#70) * No longer interprets `x -> f(x)` as a form a lambda expression. Use `x ~ f(x)` instead. (#54) * `desc(x)` is no longer supported in `list.sort` and `list.order`. Use `-x` or `(x)` instead. (#66) Version 0.3 === API Break: `list.search` now evaluates expression recursively in a list and supports lambda expression. Add `equal()` function for logical and fuzzy filtering and searching which supports exact equality, atomic equality, inclusion, pattern matching, string-distance tolerance. Add `List()` to provide an environment in which most list functions are defined for light-weight chaining that does not rely on external operators. Version 0.2.5 === Add `list.apply` which is a wrapper function of lapply. Add `list.search` that searches a list recursively. Add exact search functions: `equal`, `unequal`, `unidentical`, `include`, and `exclude`. Add fuzzy search functions: `like` and `unlike` based on stringdist package. Enhance `list.clean` which now supports recursive cleaning. Version 0.2.4 === Add `list.common` that returns the common cases of all list member by expression. Version 0.2.3 === Improve performance (#26, #27) Add `list.flatten` that flattens a nested list to one-level. Version 0.2.2 === Add `list.stack` that binds list members to a data.frame. Add `list.zip` that combines multiple lists element-wisely. Add `list.maps` that performs mapping over multiple lists. Performance improvements. Minor maintainence updates. `list.cases` supports list-like cases Fixed [#23](https://github.com/renkun-ken/rlist/issues/23) Fixed [#25](https://github.com/renkun-ken/rlist/issues/25) `list.select` no longer accepts explicit lambda expressions. Vignettes updated Version 0.2.1 === Add new function `list.table` Minor maintainence updates. Fixed [#6](https://github.com/renkun-ken/rlist/issues/6) Fixed [#11](https://github.com/renkun-ken/rlist/issues/11) Fixed [#20](https://github.com/renkun-ken/rlist/issues/20) Fixed [#21](https://github.com/renkun-ken/rlist/issues/21) Version 0.2 === Add `list.join`, `list.mapv`, `list.do`, `list.clean`, `list.parse` Add vignettes Version 0.1 === Implement functions