Initial release.
New functions:
i_enumerate.array
can iterate over arbitrary margins,
providing you with a vector index.i_window
constructs a sliding window of arbitrary
length over a given iterator, generalizing
itertools2::ipairwise
and itripletwise
.i_rle()
and i_rle_inverse()
for run-length encoding.i_accum()
,
reduce()
, and sum()
and
prod()
.i_chain(...)
has a companion function
i_concat(it)
which accepts an iterable (rather than
...
).as.numeric
,
as.vector
, as.character
, and
as.logical
.concat()
pastes chunks from an iterator into a
vector.New features:
icount
,
icountn
, idiv
, igrid
,
iseq
, i_enumerate.default
,
iteror.default
, iteror.data.frame
,
iteror.default
and i_enumerate.array
all have
shared logic; all accept options chunks
,
chunksize
and recycle
with equivalent
behavior.icount
and icountn
preserve dimnames.icountn
, igrid
,
i_enumerate.array
and iteror.array
have option
rowMajor
to control the order of iteration.i_unique
uses a hash table rather than linear scan, for
much improved performance; it also now works with any type of R
object.irunif
,
isample
and friends accept options
independent
, and seed
if given, the iterator
will maintain a private seed value, so that interleaving with other
iterators does not affect reproducibility. You can use a specific random
number generator algorithm by also giving kind
,
normal.kind
, and sample.kind
.i_tee
works for any iterator, using a queue, where
previously itertools::i_tee
only worked for memory-backed
iterators.py_iteror
wraps an iterator so
that it can be used by Python code via package reticulate
.
Meanwhile iteror
has a method for Python objects, allowing
Python iterators to be used transparently with iteror code.