Read a Jupyter/IPython notebook file (.ipynb) via jsonlite::fromJSON(), convert its code cells to R Markdown code chunks, preserve Markdown cells, and write out the results to an Rmd file.

convert_ipynb(input, output = xfun::with_ext(input, "Rmd"))

Arguments

input

Path to the input .ipynb file.

output

The output file path.

Value

The output file path (invisibly).

Details

This simple converter may have some rough edges, depending on how many IPython-specific features are used in a notebook. For example, line magics are not automatically converted (warnings will be issued if line magics are detected), but you may consider using or writing R functions to replace them in R Markdown (e.g., the %load magic may be replaced by reticulate::source_python()). Cell magics will be converted to code chunks with the (knitr) language engine names being the magic names. For example, the cell magic %%js is converted to ```{js} in R Markdown. This does not always work because not all IPython cell magics have their counterparts in knitr's language engines, but common cell magics like %%bash, %%sh, %%js, %%perl, %%python, and %%ruby should work.

Examples

# this is not a real ipynb file, but illustrates what convert_ipynb() does
nb_data <- list(
  cells = list(
    list(cell_type = 'markdown', source = 'Hi **Markdown**!'),
    list(cell_type = 'code', source = 'print("Hi R Markdown!")')
  ),
  metadata = list(
    kernelspec = list(language = 'python')
  )
)
nb_file = tempfile(fileext = '.ipynb')
jsonlite::write_json(nb_data, nb_file, auto_unbox = TRUE, pretty = TRUE)
xfun::file_string(nb_file)  # show file content
#> {
#>   "cells": [
#>     {
#>       "cell_type": "markdown",
#>       "source": "Hi **Markdown**!"
#>     },
#>     {
#>       "cell_type": "code",
#>       "source": "print(\"Hi R Markdown!\")"
#>     }
#>   ],
#>   "metadata": {
#>     "kernelspec": {
#>       "language": "python"
#>     }
#>   }
#> }

# convert to R Markdown
nb_rmd = rmarkdown:::convert_ipynb(nb_file)
xfun::file_string(nb_rmd)
#> ---
#> title: An R Markdown document converted from "/tmp/RtmpxfV7Dm/file16d32bb5ecb.ipynb"
#> output: html_document
#> ---
#> 
#> Hi **Markdown**!
#> 
#> ```{python}
#> print("Hi R Markdown!")
#> ```
#>