I'm trying to run a Jupyter notebook (R) from within a notebook (Python). Using the command:
%run "DESeq2 Analysis.ipynb"
Calls the Noteook and runs it, but gives a Python error. The notebook that is being called (DESeq2 Analysis.ipynb) should be run with the R kernel. DESeq2 Analysis.ipynb runs fine with the R kernel when I run it independently. What appears to be happening is the calling notebook running with a Python 3 kernel is calling DESeq2 Analysis.ipynb and trying to run the code with the Python 3 kernel instead of R kernel.
Is there a way to specify the kernel when using the %run command?
From @Louise Davies answer to Can Jupyter run a separate R notebook from within a Python notebook?
I don't think you can use the
%run
magic command that way as it executes the file in the current kernel.Nbconvert has an execution API that allows you to execute notebooks. So you could create a shell script that executes all your notebooks like so:
#!/bin/bash jupyter nbconvert --to notebook --execute 1_py3.ipynb jupyter nbconvert --to notebook --execute 2_py3.ipynb jupyter nbconvert --to notebook --execute 3_py3.ipynb jupyter nbconvert --to notebook --execute 4_R.ipynb
Since your notebooks require no shared state this should be fine. Alternatively, if you really wanna do it in a notebook, you use the execute Python API to call nbconvert from your notebook.
import nbformat from nbconvert.preprocessors import ExecutePreprocessor with open("1_py3.ipynb") as f1, open("2_py3.ipynb") as f2, open("3_py3.ipynb") as f3, open("4_R.ipynb") as f4: nb1 = nbformat.read(f1, as_version=4) nb2 = nbformat.read(f2, as_version=4) nb3 = nbformat.read(f3, as_version=4) nb4 = nbformat.read(f4, as_version=4) ep_python = ExecutePreprocessor(timeout=600, kernel_name='python3') #Use jupyter kernelspec list to find out what the kernel is called on your system ep_R = ExecutePreprocessor(timeout=600, kernel_name='ir') # path specifies which folder to execute the notebooks in, so set it to the one that you need so your file path references are correct ep_python.preprocess(nb1, {'metadata': {'path': 'notebooks/'}}) ep_python.preprocess(nb2, {'metadata': {'path': 'notebooks/'}}) ep_python.preprocess(nb3, {'metadata': {'path': 'notebooks/'}}) ep_R.preprocess(nb4, {'metadata': {'path': 'notebooks/'}}) with open("1_py3.ipynb", "wt") as f1, open("2_py3.ipynb", "wt") as f2, open("3_py3.ipynb", "wt") as f3, open("4_R.ipynb", "wt") as f4: nbformat.write(nb1, f1) nbformat.write(nb2, f2) nbformat.write(nb3, f3) nbformat.write(nb4, f4)
Note that this is pretty much just the example copied from the nbconvert execute API docs: link
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With