Fix more broken links
[worg.git] / org-contrib / babel / library-of-babel.org
1 #+title:    The Library of Babel
2 #+SEQ_TODO: TODO PROPOSED | DONE DEFERRED REJECTED
3 #+OPTIONS:  H:3 num:nil toc:2 \n:nil @:t ::t |:t ^:t -:t f:t *:t TeX:t LaTeX:nil skip:nil d:(HIDE) tags:not-in-toc
4 #+STARTUP:  odd hideblocks
5 #+STYLE:    <style type="text/css">#outline-container-1 { clear:both; }</style>
6 #+STYLE:      <style type="text/css">#table-of-contents{ max-width:100%; }</style>
7 #+LINK_UP:  index.php
8 #+LINK_HOME: http://orgmode.org/worg/
9
10 #+begin_html
11   <div id="logo" style="float: left; text-align: center; max-width: 340px; font-size: 8pt; margin-left: 1em;">
12     <p>
13       <img src="../../images/babel/library-of-babel.png" alt="Library of Babel"/>
14       <div id="attr">
15         The Library of Babel, by Pierre Clayette
16         <p>
17         <a href="http://downlode.org/Etext/library_of_babel.html">Full text of the Borges short story</a>
18         </p>
19       </div>
20     </p>  
21   </div>
22 #+end_html
23
24 * Introduction
25   The Library of Babel is an extensible collection of ready-made and
26   easily-shortcut-callable source-code blocks for handling common
27   tasks.  Org-babel comes pre-populated with the source-code blocks
28   located in this file. It is possible to add source-code blocks from
29   any org-mode file to the library by calling =(org-babel-lob-ingest
30   "path/to/file.org")=.
31   
32   This file is included in worg less for viewing through the web
33   interface, and more for contribution through the worg git
34   repository.  If you have code snippets that you think others may
35   find useful please add them to this file and [[file:../../worg-git.org::#contribute-to-worg][contribute them]] to
36   worg.
37   
38   To use the Library of Babel, 
39
40 * Plotting code
41
42 ** R
43   Plot column 2 (y axis) against column 1 (x axis). Columns 3 and beyond, if present, are ignored.
44
45   #+name: R-plot(data=R-plot-example-data)
46 #+begin_src R :session *R*
47 plot(data)
48 #+end_src
49
50 #+tblname: R-plot-example-data
51 | 1 |  2 |
52 | 2 |  4 |
53 | 3 |  9 |
54 | 4 | 16 |
55 | 5 | 25 |
56
57 #+lob: R-plot(data=R-plot-example-data)
58
59 #+resname: R-plot(data=R-plot-example-data)
60 : nil
61
62 ** Gnuplot
63
64 * Table/Matrix manipulation
65 *** Filtering a table by rows
66 #+function: filter-table(table, field, value)
67 #+begin_src emacs-lisp
68   (defun org-lob-filter-table (table field value)
69     (if (and (> (length table) 1)
70              (eq (second table) 'hline))
71         (append
72          (list
73           (first table)
74           'hline)
75          (org-lob-filter-table (cddr table) field value))
76       (delq nil
77             (mapcar (lambda (row)
78                       (cond
79                        ((eq row 'hline) 'hline)
80                        ((equal (nth field row) value) row)))
81                     table))))
82   
83   (org-lob-filter-table table field value)
84 #+end_src
85
86 *** Transposing a matrix
87 ***** COMMENT Emacs 
88
89 FIXME: don't return error "variable "table" in block "transpose-elisp" must
90 be assigned a default value".
91
92 #+name: transpose-elisp(table)
93 #+begin_src emacs-lisp
94   (apply #'mapcar* #'list table)
95 #+end_src
96
97 ***** Example usage
98
99 #+tblname: transpose-example
100 | 1 | 2 | 3 |
101 | 4 | 5 | 6 |
102
103 #+lob: transpose-elisp(table=transpose-example)
104
105 #+resname: transpose-elisp(table=transpose-example)
106 | 1 | 4 |
107 | 2 | 5 |
108 | 3 | 6 |
109
110 *** Binding tables together by columns
111 ***** Emacs lisp
112 #+name: column-bind-elisp(a=tab1, b=tab2)
113 #+begin_src emacs-lisp 
114 (mapcar* 'append a b)
115 #+end_src
116
117 ***** R
118 #+name: column-bind-R(a=tab3, b=tab4)
119 #+begin_src R :colnames yes
120 cbind(a, b)
121 #+end_src
122
123 ***** Example usage
124
125 Suppose the tables are
126
127 #+tblname: tab1
128 | 1 | 2 | 3 |
129 | 7 | 8 | 9 |
130
131 #+tblname: tab2
132 |  4 |  5 |  6 |
133 | 10 | 11 | 12 |
134
135 #+lob: column-bind-elisp(tab1, tab2)
136
137 #+resname: column-bind-elisp(tab1, tab2)
138 | 1 | 2 | 3 |  4 |  5 |  6 |
139 | 7 | 8 | 9 | 10 | 11 | 12 |
140
141  The R code block can also cope with column names:
142
143 #+tblname: tab3
144 | a | b | c |
145 |---+---+---|
146 | 1 | 2 | 3 |
147 | 7 | 8 | 9 |
148
149 #+tblname: tab4
150 |  d |  e |  f |
151 |----+----+----|
152 |  4 |  5 |  6 |
153 | 10 | 11 | 12 |