pythonrgeneratorreticulate

Is there any way to call base python function in r using reticulate?


I got a "generator object" from a python function. However, I tried many ways but failed to read the "generator object" in r using reticulate. I know python base function list() can convert "generator object" to "json", which I can then read in r. I wonder how to use base python function in r? (I would not prefer to use py_run_file)

For example:

>library(reticulate)
>foo <- import("foo")
>res <- foo.func()
<generator object at 0x7fd4fe98ee40>

Solution

  • You could use iterate or iter_next.

    As an example, consider a python generator firstn.py:

    def firstn(n):
      num = 0
      while num < n:
        yield num
        num += 1
    

    You can traverse the generator either with iterate :

    library(reticulate)
    source_python('firstn.py')
    gen <- firstn(10)
    gen
    #<generator object firstn at 0x0000020CE536AF10>
    
    result <- iterate(gen)
    result
    # [1] 0 1 2 3 4 5 6 7 8 9
    

    or with iter_next:

    iter_next(gen)
    [1] 0
    iter_next(gen)
    [1] 1
    iter_next(gen)
    [1] 2