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.