25 lines
511 B
R
25 lines
511 B
R
|
library(iterators)
|
||
|
|
||
|
# This functions returns an iterator that recycles the values of
|
||
|
# the specified iterator
|
||
|
irecycle <- function(it) {
|
||
|
values <- as.list(iter(it))
|
||
|
i <- length(values)
|
||
|
if (i == 0) stop('iterator must have at least one value')
|
||
|
|
||
|
nextEl <- function() {
|
||
|
i <<- i + 1
|
||
|
if (i > length(values))
|
||
|
i <<- 1
|
||
|
values[[i]]
|
||
|
}
|
||
|
|
||
|
obj <- list(nextElem=nextEl)
|
||
|
class(obj) <- c('irecycle', 'abstractiter', 'iter')
|
||
|
obj
|
||
|
}
|
||
|
|
||
|
it <- irecycle(icount(3))
|
||
|
for (i in 1:9)
|
||
|
print(nextElem(it))
|