Skip to content

loop() and collect() are helpers for iterating over iterator functions such as generators.

  • loop() takes a for loop expression in which the collection can be an iterator function.

  • collect() loops over the iterator and collects the values in a list.

Usage

collect(x, n = NULL)

loop(loop)

Arguments

x

An iterator function.

n

The number of elements to collect. If x is an infinite sequence, n must be supplied to prevent an infinite loop.

loop

A for loop expression.

Value

collect() returns a list of values; loop() returns the exhausted() sentinel, invisibly.

See also

async_collect() for async generators.

Examples

generate_abc <- generator(function() for (x in letters[1:3]) yield(x))
abc <- generate_abc()

# Collect 1 element:
collect(abc, n = 1)
#> [[1]]
#> [1] "a"
#> 

# Collect all remaining elements:
collect(abc)
#> [[1]]
#> [1] "b"
#> 
#> [[2]]
#> [1] "c"
#> 

# With exhausted iterators collect() returns an empty list:
collect(abc)
#> list()


# With loop() you can use `for` loops with iterators:
abc <- generate_abc()
loop(for (x in abc) print(x))
#> [1] "a"
#> [1] "b"
#> [1] "c"