Created
September 30, 2014 02:36
-
-
Save lgautier/955e14077322480803e2 to your computer and use it in GitHub Desktop.
rpy2 and HTML display in ipython
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "metadata": { | |
| "name": "", | |
| "signature": "sha256:e814b7d85c1dc274b3c62ca6849951326dee84fa31b999f9735064f46fb45a7a" | |
| }, | |
| "nbformat": 3, | |
| "nbformat_minor": 0, | |
| "worksheets": [ | |
| { | |
| "cells": [ | |
| { | |
| "cell_type": "code", | |
| "collapsed": false, | |
| "input": [ | |
| "import jinja2\n", | |
| "from IPython.display import HTML\n", | |
| "template_list = jinja2.Template(\"\"\"\n", | |
| "<style>\n", | |
| "</style>\n", | |
| "<p><emph>{{ clsname }}</emph> with {{ rlist | length }} elements:</p>\n", | |
| "<ul class=\"rpy2\">\n", | |
| "{%- for elt_i in range(display_neltmax) %}\n", | |
| " <li><b>{{ rlist.names[elt_i] }} :</b> {{ rlist[elt_i] }}</li>\n", | |
| "{%- endfor %}\n", | |
| "{%- if display_neltmax < (rlist | length) %}\n", | |
| " <li>...</li> \n", | |
| "{%- endif %}\n", | |
| "</ul>\n", | |
| "\"\"\")\n", | |
| "\n", | |
| "template_dataframe = jinja2.Template(\"\"\"\n", | |
| "<style>\n", | |
| "table.rpy2 {\n", | |
| " border: solid 1px rgb(180, 180, 180);\n", | |
| "}\n", | |
| "table.rpy2 th {\n", | |
| " background-color: rgb(215, 215, 215);\n", | |
| "}\n", | |
| "table.rpy2 td {\n", | |
| " text-align: right;\n", | |
| " font-family: monospace;\n", | |
| "}\n", | |
| "</style>\n", | |
| "<emph>{{ clsname }}</emph> with {{ dataf | length }} columns:\n", | |
| "<table class=\"rpy2\">\n", | |
| " <thead>\n", | |
| " <tr>\n", | |
| "{%- for col_i in range(display_ncolmax - 2) %}\n", | |
| " <th>{{ dataf.names[col_i] }}</th>\n", | |
| "{%- endfor %}\n", | |
| "{%- if display_ncolmax < dataf.ncol %}\n", | |
| " <th>...</th> \n", | |
| "{%- endif %}\n", | |
| "{%- for col_i in range(2) %}\n", | |
| " <th>{{ dataf.names[col_i+display_ncolmax] }}</th>\n", | |
| "{%- endfor %}\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| "{%- for row_i in range(display_nrowmax - 3) %}\n", | |
| " <tr>\n", | |
| " {%- for col_i in range(display_ncolmax - 2) %}\n", | |
| " <td>{{ dataf[col_i][row_i] }}</td>\n", | |
| " {%- endfor %}\n", | |
| " {%- if display_ncolmax < dataf.ncol %}\n", | |
| " <td>...</td> \n", | |
| " {%- endif %}\n", | |
| " {%- for col_i in range(2) %}\n", | |
| " <td>{{ dataf[col_i+display_ncolmax][row_i] }}</td>\n", | |
| " {%- endfor %}\n", | |
| " </tr>\n", | |
| "{%- endfor %}\n", | |
| "\n", | |
| "{%- if dataf.nrow > display_nrowmax %}\n", | |
| " <tr>\n", | |
| " {%- for col_i in range(display_ncolmax - 2) %}\n", | |
| " <td>...</td>\n", | |
| " {%- endfor %}\n", | |
| " {%- if display_ncolmax < dataf.ncol %}\n", | |
| " <td>...</td> \n", | |
| " {%- endif %}\n", | |
| " {%- for col_i in range(2) %}\n", | |
| " <td>...</td>\n", | |
| " {%- endfor %}\n", | |
| " </tr>\n", | |
| "{%- endif %}\n", | |
| "\n", | |
| "{%- for row_i in range(3) %}\n", | |
| " <tr>\n", | |
| " {%- for col_i in range(display_ncolmax - 2) %}\n", | |
| " <td>{{ dataf[col_i][row_i+display_nrowmax] }}</td>\n", | |
| " {%- endfor %}\n", | |
| " {%- if display_ncolmax < dataf.ncol %}\n", | |
| " <td>...</td> \n", | |
| " {%- endif %}\n", | |
| " {%- for col_i in range(2) %}\n", | |
| " <td>{{ dataf[col_i+display_ncolmax][row_i+display_nrowmax] }}</td>\n", | |
| " {%- endfor %}\n", | |
| " </tr>\n", | |
| "{%- endfor %}\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "\"\"\")\n", | |
| "\n", | |
| "template_ridentifiedobject = jinja2.Template(\"\"\"\n", | |
| "<ul style=\"list-style-type: none;\">\n", | |
| "<li>{{ clsname }} objects</li>\n", | |
| "<li>Origin in R: {{ origin }}</li>\n", | |
| "</ul>\n", | |
| "\"\"\")\n", | |
| "\n", | |
| "from rpy2.robjects import vectors, RObject, SignatureTranslatedFunction\n", | |
| "\n", | |
| "ip = get_ipython()\n", | |
| "html_f = ip.display_formatter.formatters['text/html']\n", | |
| "def html_rlist(rlist):\n", | |
| " html = template_list.render({\n", | |
| " 'clsname': type(rlist).__name__,\n", | |
| " 'rlist': rlist,\n", | |
| " 'display_neltmax': min(10, len(rlist))})\n", | |
| " return html\n", | |
| "html_f.for_type(vectors.ListVector, html_rlist)\n", | |
| "def html_rdataframe(dataf):\n", | |
| " html = template_dataframe.render({'dataf': dataf,\n", | |
| " 'clsname': type(dataf).__name__,\n", | |
| " 'display_nrowmax': min(10, dataf.nrow),\n", | |
| " 'display_ncolmax': min(6, dataf.ncol)})\n", | |
| " return html\n", | |
| "html_f.for_type(vectors.DataFrame, html_rdataframe)\n", | |
| "\n", | |
| "from rpy2 import rinterface\n", | |
| "def wherefrom(name, startenv=rinterface.globalenv):\n", | |
| " \"\"\" when calling 'get', where the R object is coming from. \"\"\"\n", | |
| " env = startenv\n", | |
| " obj = None\n", | |
| " retry = True\n", | |
| " while retry:\n", | |
| " try:\n", | |
| " obj = env[name]\n", | |
| " retry = False\n", | |
| " except LookupError:\n", | |
| " env = env.enclos()\n", | |
| " if env.rsame(rinterface.emptyenv):\n", | |
| " retry = False\n", | |
| " else:\n", | |
| " retry = True\n", | |
| " return env\n", | |
| "\n", | |
| "def html_ridentifiedobject(obj):\n", | |
| " if hasattr(obj, '__rname__') and obj.__rname__ is not None:\n", | |
| " env = wherefrom(obj.__rname__)\n", | |
| " try:\n", | |
| " origin = env.do_slot('name')[0]\n", | |
| " except LookupError:\n", | |
| " origin = 'package:base ?'\n", | |
| " else:\n", | |
| " origin = '???'\n", | |
| " html = template_ridentifiedobject.render({\n", | |
| " 'clsname': type(obj).__name__,\n", | |
| " 'origin': origin,\n", | |
| " 'obj': obj})\n", | |
| " return html\n", | |
| "html_f.for_type(RObject, html_ridentifiedobject)\n", | |
| "html_f.for_type(SignatureTranslatedFunction, html_ridentifiedobject)\n" | |
| ], | |
| "language": "python", | |
| "metadata": {}, | |
| "outputs": [], | |
| "prompt_number": 1 | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "R `list`" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "collapsed": false, | |
| "input": [ | |
| "rlist = vectors.ListVector({'a': 1,\n", | |
| " 'b': 'cde'})\n", | |
| "rlist" | |
| ], | |
| "language": "python", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "html": [ | |
| "\n", | |
| "<style>\n", | |
| "</style>\n", | |
| "<p><emph>ListVector</emph> with 2 elements:</p>\n", | |
| "<ul class=\"rpy2\">\n", | |
| " <li><b>b :</b> [1] \"cde\"\n", | |
| "</li>\n", | |
| " <li><b>a :</b> [1] 1\n", | |
| "</li>\n", | |
| "</ul>" | |
| ], | |
| "metadata": {}, | |
| "output_type": "pyout", | |
| "prompt_number": 3, | |
| "text": [ | |
| "<ListVector - Python:0x7fc1a91083c8 / R:0x2caf540>\n", | |
| "[StrVector, IntVector]\n", | |
| " b: <class 'rpy2.robjects.vectors.StrVector'>\n", | |
| " <StrVector - Python:0x7fc1a9110048 / R:0x2bb3fe8>\n", | |
| "['cde']\n", | |
| " a: <class 'rpy2.robjects.vectors.IntVector'>\n", | |
| " <IntVector - Python:0x7fc1a9110448 / R:0x2bb4018>\n", | |
| "[ 1]" | |
| ] | |
| } | |
| ], | |
| "prompt_number": 3 | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "R `data.frame`" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "collapsed": false, | |
| "input": [ | |
| "from rpy2.robjects.packages import importr, data\n", | |
| "datasets = importr('datasets')\n", | |
| "dataf = data(datasets).fetch('mtcars')['mtcars']\n", | |
| "dataf" | |
| ], | |
| "language": "python", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "html": [ | |
| "\n", | |
| "<style>\n", | |
| "table.rpy2 {\n", | |
| " border: solid 1px rgb(180, 180, 180);\n", | |
| "}\n", | |
| "table.rpy2 th {\n", | |
| " background-color: rgb(215, 215, 215);\n", | |
| "}\n", | |
| "table.rpy2 td {\n", | |
| " text-align: right;\n", | |
| " font-family: monospace;\n", | |
| "}\n", | |
| "</style>\n", | |
| "<emph>DataFrame</emph> with 11 columns:\n", | |
| "<table class=\"rpy2\">\n", | |
| " <thead>\n", | |
| " <tr>\n", | |
| " <th>mpg</th>\n", | |
| " <th>cyl</th>\n", | |
| " <th>disp</th>\n", | |
| " <th>hp</th>\n", | |
| " <th>...</th>\n", | |
| " <th>qsec</th>\n", | |
| " <th>vs</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <td>21.0</td>\n", | |
| " <td>6.0</td>\n", | |
| " <td>160.0</td>\n", | |
| " <td>110.0</td>\n", | |
| " <td>...</td>\n", | |
| " <td>16.46</td>\n", | |
| " <td>0.0</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <td>21.0</td>\n", | |
| " <td>6.0</td>\n", | |
| " <td>160.0</td>\n", | |
| " <td>110.0</td>\n", | |
| " <td>...</td>\n", | |
| " <td>17.02</td>\n", | |
| " <td>0.0</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <td>22.8</td>\n", | |
| " <td>4.0</td>\n", | |
| " <td>108.0</td>\n", | |
| " <td>93.0</td>\n", | |
| " <td>...</td>\n", | |
| " <td>18.61</td>\n", | |
| " <td>1.0</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <td>21.4</td>\n", | |
| " <td>6.0</td>\n", | |
| " <td>258.0</td>\n", | |
| " <td>110.0</td>\n", | |
| " <td>...</td>\n", | |
| " <td>19.44</td>\n", | |
| " <td>1.0</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <td>18.7</td>\n", | |
| " <td>8.0</td>\n", | |
| " <td>360.0</td>\n", | |
| " <td>175.0</td>\n", | |
| " <td>...</td>\n", | |
| " <td>17.02</td>\n", | |
| " <td>0.0</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <td>18.1</td>\n", | |
| " <td>6.0</td>\n", | |
| " <td>225.0</td>\n", | |
| " <td>105.0</td>\n", | |
| " <td>...</td>\n", | |
| " <td>20.22</td>\n", | |
| " <td>1.0</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <td>14.3</td>\n", | |
| " <td>8.0</td>\n", | |
| " <td>360.0</td>\n", | |
| " <td>245.0</td>\n", | |
| " <td>...</td>\n", | |
| " <td>15.84</td>\n", | |
| " <td>0.0</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <td>...</td>\n", | |
| " <td>...</td>\n", | |
| " <td>...</td>\n", | |
| " <td>...</td>\n", | |
| " <td>...</td>\n", | |
| " <td>...</td>\n", | |
| " <td>...</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <td>17.8</td>\n", | |
| " <td>6.0</td>\n", | |
| " <td>167.6</td>\n", | |
| " <td>123.0</td>\n", | |
| " <td>...</td>\n", | |
| " <td>18.9</td>\n", | |
| " <td>1.0</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <td>16.4</td>\n", | |
| " <td>8.0</td>\n", | |
| " <td>275.8</td>\n", | |
| " <td>180.0</td>\n", | |
| " <td>...</td>\n", | |
| " <td>17.4</td>\n", | |
| " <td>0.0</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <td>17.3</td>\n", | |
| " <td>8.0</td>\n", | |
| " <td>275.8</td>\n", | |
| " <td>180.0</td>\n", | |
| " <td>...</td>\n", | |
| " <td>17.6</td>\n", | |
| " <td>0.0</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>" | |
| ], | |
| "metadata": {}, | |
| "output_type": "pyout", | |
| "prompt_number": 4, | |
| "text": [ | |
| "<DataFrame - Python:0x7fc1a9120108 / R:0x29709f0>\n", | |
| "[Float..., Float..., Float..., ..., Float..., Float..., Float...]\n", | |
| " mpg: <class 'rpy2.robjects.vectors.FloatVector'>\n", | |
| " <FloatVector - Python:0x7fc1a9120488 / R:0x2eefae0>\n", | |
| "[21.000000, 21.000000, 22.800000, ..., 19.700000, 15.000000, 21.400000]\n", | |
| " cyl: <class 'rpy2.robjects.vectors.FloatVector'>\n", | |
| " <FloatVector - Python:0x7fc1a9120988 / R:0x2629ca0>\n", | |
| "[6.000000, 6.000000, 4.000000, ..., 6.000000, 8.000000, 4.000000]\n", | |
| " disp: <class 'rpy2.robjects.vectors.FloatVector'>\n", | |
| " <FloatVector - Python:0x7fc1a9120e88 / R:0x262c320>\n", | |
| "[160.000000, 160.000000, 108.000000, ..., 145.000000, 301.000000, 121.000000]\n", | |
| " ...\n", | |
| " mpg: <class 'rpy2.robjects.vectors.FloatVector'>\n", | |
| " <FloatVector - Python:0x7fc1a9123508 / R:0x2fdec90>\n", | |
| "[1.000000, 1.000000, 1.000000, ..., 1.000000, 1.000000, 1.000000]\n", | |
| " cyl: <class 'rpy2.robjects.vectors.FloatVector'>\n", | |
| " <FloatVector - Python:0x7fc1a9123a08 / R:0x31e6590>\n", | |
| "[4.000000, 4.000000, 4.000000, ..., 5.000000, 5.000000, 4.000000]\n", | |
| " disp: <class 'rpy2.robjects.vectors.FloatVector'>\n", | |
| " <FloatVector - Python:0x7fc1a9120f88 / R:0x326d340>\n", | |
| "[4.000000, 4.000000, 1.000000, ..., 6.000000, 8.000000, 2.000000]" | |
| ] | |
| } | |
| ], | |
| "prompt_number": 4 | |
| }, | |
| { | |
| "cell_type": "code", | |
| "collapsed": false, | |
| "input": [ | |
| "from rpy2 import robjects" | |
| ], | |
| "language": "python", | |
| "metadata": {}, | |
| "outputs": [], | |
| "prompt_number": 6 | |
| }, | |
| { | |
| "cell_type": "code", | |
| "collapsed": false, | |
| "input": [ | |
| "robjects.r.sd" | |
| ], | |
| "language": "python", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "html": [ | |
| "\n", | |
| "<ul style=\"list-style-type: none;\">\n", | |
| "<li>SignatureTranslatedFunction objects</li>\n", | |
| "<li>Origin in R: package:stats</li>\n", | |
| "</ul>" | |
| ], | |
| "metadata": {}, | |
| "output_type": "pyout", | |
| "prompt_number": 7, | |
| "text": [ | |
| "<SignatureTranslatedFunction - Python:0x7fc1c5128548 / R:0x269abd0>" | |
| ] | |
| } | |
| ], | |
| "prompt_number": 7 | |
| }, | |
| { | |
| "cell_type": "code", | |
| "collapsed": false, | |
| "input": [ | |
| "from rpy2.robjects.packages import importr\n", | |
| "ggplot2 = importr('ggplot2')" | |
| ], | |
| "language": "python", | |
| "metadata": {}, | |
| "outputs": [], | |
| "prompt_number": 8 | |
| }, | |
| { | |
| "cell_type": "code", | |
| "collapsed": false, | |
| "input": [ | |
| "ggplot2.ggplot" | |
| ], | |
| "language": "python", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "html": [ | |
| "\n", | |
| "<ul style=\"list-style-type: none;\">\n", | |
| "<li>DocumentedSTFunction objects</li>\n", | |
| "<li>Origin in R: package:ggplot2</li>\n", | |
| "</ul>" | |
| ], | |
| "metadata": {}, | |
| "output_type": "pyout", | |
| "prompt_number": 13, | |
| "text": [ | |
| "<DocumentedSTFunction - Python:0x7fc1a909b388 / R:0x4025ae0>" | |
| ] | |
| } | |
| ], | |
| "prompt_number": 13 | |
| }, | |
| { | |
| "cell_type": "code", | |
| "collapsed": false, | |
| "input": [], | |
| "language": "python", | |
| "metadata": {}, | |
| "outputs": [] | |
| } | |
| ], | |
| "metadata": {} | |
| } | |
| ] | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment