Can Jupyter run a separate R notebook from within a Python notebook?

后端 未结 2 1211
攒了一身酷
攒了一身酷 2021-01-19 01:48

I have a Jupyter notebook (python3) which is a batch job -- it runs three separate python3 notebooks using %run. I want to invoke a fourth Jupyter R-kernel note

2条回答
  •  傲寒
    傲寒 (楼主)
    2021-01-19 01:57

    I was able to use the answer to implement two solutions to running an R notebook from a python3 notebook.

    1. call nbconvert from ! shell command

    Adding a simple ! shell command to the python3 notebook:

    !jupyter nbconvert --to notebook --execute r.ipynb

    So the notebook looks like this:

    1. %run '1_py3.ipynb'
    2. %run '2_py3.ipynb'
    3. %run '3_py3.ipynb'
    4. !jupyter nbconvert --to notebook --execute 4_R.ipynb

    This seems simple and easy to use.

    2. invoke nbformat in a cell

    Add this to a cell in the batch notebook:

    import nbformat
    from nbconvert.preprocessors import ExecutePreprocessor
    
    rnotebook = "r.ipynb"
    rnotebook_out = "r_out.ipynb"
    rnotebook_path = '/home/jovyan/work/'
    
    with open(rnotebook) as f1:
        nb1 = nbformat.read(f1, as_version=4)
    
    ep_R = ExecutePreprocessor(timeout=600, kernel_name='ir')
    ep_R.preprocess(nb1, {'metadata': {'path': rnotebook_path}})
    
    with open(rnotebook_out, "wt") as f1:
        nbformat.write(nb1, f1)
    

    This is based on the answer from Louise Davies (which is based on the nbcovert docs example), but it only processes one file -- the non-R files can be processed in separate cells with %run.

    If the batch notebook is in the same folder as the notebook it is executing then the path variable can be set with the %pwd shell magic, which returns the path of the batch notebook.

    When we use nbformat.write we choose between replacing the original notebook (which is convenient and intuitive, but could corrupt or destroy the file) and creating a new file for output. A third option if the cell output isn't needed (e.g. in a workflow that manipulates files and writes logs) is to just ignore writing the cell output entirely.

    drawbacks

    One drawback to both methods is that they do not pipe cell results back into the master notebook display -- as opposed to the way that %run displays the output of a notebook in its result cell. The !jupyter nbconvert method appears to show stdout from nbconvert, while the import nbconvert method showed me nothing.

提交回复
热议问题