31 lines
572 B
R
31 lines
572 B
R
|
library(iterators)
|
||
|
|
||
|
# Returns an iterator that limits another iterator based on time
|
||
|
itimer <- function(it, time) {
|
||
|
it <- iter(it)
|
||
|
start <- proc.time()[[3]]
|
||
|
|
||
|
nextEl <- function() {
|
||
|
current <- proc.time()[[3]]
|
||
|
if (current - start >= time)
|
||
|
stop('StopIteration')
|
||
|
|
||
|
nextElem(it)
|
||
|
}
|
||
|
|
||
|
obj <- list(nextElem=nextEl)
|
||
|
class(obj) <- c('itimer', 'abstractiter', 'iter')
|
||
|
obj
|
||
|
}
|
||
|
|
||
|
# Create a iterator that counts for one second
|
||
|
it <- itimer(icount(Inf), 1)
|
||
|
tryCatch({
|
||
|
repeat {
|
||
|
print(nextElem(it))
|
||
|
}
|
||
|
},
|
||
|
error=function(e) {
|
||
|
cat('timer expired\n')
|
||
|
})
|