diff --git a/rorg.org b/rorg.org index a5d60d2e7..d578f00c5 100644 --- a/rorg.org +++ b/rorg.org @@ -3,6 +3,261 @@ #+SEQ_TODO: TODO PROPOSED | DONE DROPPED MAYBE #+STARTUP: oddeven + +* Tasks +** TODO evaluation of shell code as background process? [DED] + After C-c C-c on an R code block, the process may appear to block, + but C-g can be used to reclaim control of the .org buffer, without + interrupting the R evalution. However I believe this is not true + of bash/sh evaluation. [Haven't tried other languages] +** litorgy-R +*** TODO ability to select which of multiple R sessions is being used + (like ess-switch-process in .R buffers) +*** TODO a header argument specifying silent evaluation (no output) + +* Bugs +** Args out of range error + +The following block resulted in the error below [DED]. It ran without +error directly in the shell. +#+begin_src sh +cd ~/work/genopca +for platf in ill aff ; do + for pop in CEU YRI ASI ; do + rm -f $platf/hapmap-genos-$pop-all $platf/hapmap-rs-all + cat $platf/hapmap-genos-$pop-* > $platf/hapmap-genos-$pop-all + cat $platf/hapmap-rs-* > $platf/hapmap-rs-all + done +done +#+end_src + + executing source block with sh... +finished executing source block +string-equal: Args out of range: "", -1, 0 + + +* Sandbox +This is a place for code examples + +** litorgy.el beginning functionality +After evaluating litorgy.el and litorgy-script.el, you should be able +to evaluate the following blocks of code by pressing =\C-c\C-c= on the +header lines. *Note*: your version of org-mode must be at least 6.23 +or later. + +To run these examples open both [[file:litorgy/litorgy.el][litorgy.el]], [[file:litorgy/litorgy-script.el][litorgy-script.el]] and +evaluate them with =M-x eval-buffer= + +#+begin_src sh :replace t +date +#+end_src + +#+begin_src ruby +puts Time.now +#+end_src + +#+begin_src python +print "Hello world!" +#+end_src + + +** litorgy-R +To run these examples open both [[file:litorgy/litorgy.el][litorgy.el]], [[file:litorgy/litorgy-R.el][litorgy-R.el]] and evaluate +them with =M-x eval-buffer= + +#+begin_src R :replace t +hist(rgamma(20,3,3)) +a <- 9 +b <- 17 +a + b +#+end_src + +: 26 + + + +** free variables + +First assign the variable with some sort of interpreted line +- this is independent of any particular type of source code +- this could use references to table ranges + + + +** resource reference example + +This block holds an array of information written in [[http://www.yaml.org][YAML]] + +#name: yaml-array +#+begin_src yaml +--- +- 1 +- 2 +- 3 +- 4 +- 5 +#+end_src + +This next block saves the information in the YAML array into the ruby +variable =ya= and then in ruby it multiplies each variable in the =ya= +by 2. + +#name: ruby-array +#assign: ya = yaml-array +#+begin_src ruby +ya.map{ |e| e * 2 } +#+end_src + +This final block takes the output of the ruby block, and writes it to +cell =0,0= through =0,3= of the table + +#name: example-table +#assign: self[0, (1..3)] = ruby-array +| example results | +|-----------------| +| | +| | +| | + + +** litorgy plays with tables +Alright, this should demonstrate both the ability of litorgy to read +tables into a lisp source code block, and to then convert the results +of the source code block into an org table. It's using the classic +"lisp is elegant" demonstration transpose function. To try this +out... + +1. evaluate [[file:litorgy/init.el]] to load litorgy and friends +2. evaluate the transpose definition =\C-u \C-c\C-c= on the beginning of + the source block (prefix arg to inhibit output) +3. evaluate the next source code block, this should read in the table + because of the =:var table=previous=, then transpose the table, and + finally it should insert the transposed table into the buffer + immediately following the block + +*** Emacs lisp + +#+begin_src emacs-lisp +(defun transpose (table) + (apply #'mapcar* #'list table)) +#+end_src + +#+TBLNAME: sandbox +| 1 | 2 | 3 | +| 4 | schulte | 6 | + +#+begin_src emacs-lisp :var table=previous :replace t +(transpose table) +#+end_src + +#+begin_src emacs-lisp :var table=sandbox :replace t +(transpose table) +#+end_src + +*** Ruby and Python + +#+begin_src ruby :var table=sandbox :replace t +table.first.join(" - ") +#+end_src + +: "1 - 2 - 3" + +#+begin_src python :var table=sandbox :replace t +table[0] +#+end_src + +| 1 | 2 | 3 | + +#+begin_src ruby :var table=sandbox :replace t +table +#+end_src + +| 1 | 2 | 3 | +| 4 | "schulte" | 6 | + +#+begin_src python :var table=sandbox :replace t +table +#+end_src + +| 1 | 2 | 3 | +| 4 | "schulte" | 6 | + +*** R + +#+begin_src R :replace t +a <- 9 +b <- 8 + +#+end_src + +#+begin_src R :replace t +x <- c(rnorm(10, mean=-3, sd=1), rnorm(10, mean=3, sd=1)) +x +#+end_src + +: -2.059712 -1.299807 -2.518628 -4.319525 -1.944779 -5.345708 -3.921314 +: -2.841109 -0.963475 -2.465979 4.092037 1.299202 1.476687 2.128594 +: 3.200629 1.990952 1.888890 3.561541 3.818319 1.969161 + + + +* COMMENT Commentary +I'm seeing this as like commit notes, and a place for less formal +communication of the goals of our changes. + +** Eric <2009-02-06 Fri 15:41> +I think we're getting close to a comprehensive set of objectives +(although since you two are the real R user's I leave that decision up +to you). Once we've agreed on a set of objectives and agreed on at +least to broad strokes of implementation, I think we should start +listing out and assigning tasks. + +** Eric <2009-02-09 Mon 14:25> +I've done a fairly destructive edit of this file. The main goal was +to enforce a structure on the document that we can use moving forward, +so that any future objective changes are all made to the main +objective list. + +I apologize for removing sections written by other people. I did this +when they were redundant or it was not clear how to fit them into this +structure. Rest assured if the previous text wasn't persisted in git +I would have been much more cautious about removing it. + +I hope that this outline structure should be able to remain stable +through the process of fleshing out objectives, and cashing those +objectives out into tasks. That said, please feel free to make any +changes that you see fit. + +** Dan <2009-02-12 Thu 10:23> + Good job Eric with major works on this file. + +** Eric <2009-02-22 Sun 13:17> +So I skipped ahead and got started on the fun part. Namely stubbing +out some of the basic functionality. Please don't take any of the +decisions I've made so far (on things like names, functionality, +design etc...) as final decisions, I'm of course open to and hoping +for improvement. + +So far [[file:litorgy/litorgy.el][litorgy.el]] and [[file:litorgy/litorgy-script.el][litorgy-script.el]] can be used to evaluate source +code blocks of simple scripting languages. It shouldn't be too hard +(any takers) to write a litorgy-R.el modeled after litorgy-script.el +to use for evaluating R code files. + +See the [[* litorgy.el beginning functionality][Sandbox]] for evaluable examples. + +** Eric <2009-02-23 Mon 15:12> +While thinking about how to implement the transfer of data between +source blocks and the containing org-mode file, I decided it *might* +be useful to explicitly support the existence of variables which exist +independent of source blocks or tables. I'd appreciate any +feedback... (see [[free explicit variables][free explicit variables]]) + +** Eric <2009-02-23 Mon 17:53> +So as I start populating this file with source code blocks I figure I +should share this... I don't know if you guys use [[http://code.google.com/p/smart-snippet/][yasnippet]] at all, +but if you do you might find this [[file:block][block-snippet]] org-mode snippet +useful (I use it all the time). + * Overview This project is basically about putting source code into org files. This isn't just code to look pretty as a source code example, @@ -648,233 +903,5 @@ existing independently of any tables or source code blocks is novel and probably has some advantages (and probably shortfalls). -* Tasks -** TODO evaluation as background process? [DED] -** litorgy-R -*** TODO ability to select which of multiple R sessions is being used (like ess-switch-process in .R buffers) -*** TODO a header argument specifying silent evaluation (no output) - -* Sandbox -This is a place for code examples - -** litorgy.el beginning functionality -After evaluating litorgy.el and litorgy-script.el, you should be able -to evaluate the following blocks of code by pressing =\C-c\C-c= on the -header lines. *Note*: your version of org-mode must be at least 6.23 -or later. - -To run these examples open both [[file:litorgy/litorgy.el][litorgy.el]], [[file:litorgy/litorgy-script.el][litorgy-script.el]] and -evaluate them with =M-x eval-buffer= - -#+begin_src sh :replace t -date -#+end_src - -#+begin_src ruby -puts Time.now -#+end_src - -#+begin_src python -print "Hello world!" -#+end_src - - -** litorgy-R -To run these examples open both [[file:litorgy/litorgy.el][litorgy.el]], [[file:litorgy/litorgy-R.el][litorgy-R.el]] and evaluate -them with =M-x eval-buffer= - -#+begin_src R :replace t -hist(rgamma(20,3,3)) -a <- 9 -b <- 17 -a + b -#+end_src - -: 26 - - -** free variables - -First assign the variable with some sort of interpreted line -- this is independent of any particular type of source code -- this could use references to table ranges - - - -** resource reference example - -This block holds an array of information written in [[http://www.yaml.org][YAML]] - -#name: yaml-array -#+begin_src yaml ---- -- 1 -- 2 -- 3 -- 4 -- 5 -#+end_src - -This next block saves the information in the YAML array into the ruby -variable =ya= and then in ruby it multiplies each variable in the =ya= -by 2. - -#name: ruby-array -#assign: ya = yaml-array -#+begin_src ruby -ya.map{ |e| e * 2 } -#+end_src - -This final block takes the output of the ruby block, and writes it to -cell =0,0= through =0,3= of the table - -#name: example-table -#assign: self[0, (1..3)] = ruby-array -| example results | -|-----------------| -| | -| | -| | - - -** litorgy plays with tables -Alright, this should demonstrate both the ability of litorgy to read -tables into a lisp source code block, and to then convert the results -of the source code block into an org table. It's using the classic -"lisp is elegant" demonstration transpose function. To try this -out... - -1. evaluate [[file:litorgy/init.el]] to load litorgy and friends -2. evaluate the transpose definition =\C-u \C-c\C-c= on the beginning of - the source block (prefix arg to inhibit output) -3. evaluate the next source code block, this should read in the table - because of the =:var table=previous=, then transpose the table, and - finally it should insert the transposed table into the buffer - immediately following the block - -*** Emacs lisp - -#+begin_src emacs-lisp -(defun transpose (table) - (apply #'mapcar* #'list table)) -#+end_src - -#+TBLNAME: sandbox -| 1 | 2 | 3 | -| 4 | schulte | 6 | - -#+begin_src emacs-lisp :var table=previous :replace t -(transpose table) -#+end_src - -#+begin_src emacs-lisp :var table=sandbox :replace t -(transpose table) -#+end_src - -*** Ruby and Python - -#+begin_src ruby :var table=sandbox :replace t -table.first.join(" - ") -#+end_src - -: "1 - 2 - 3" - -#+begin_src python :var table=sandbox :replace t -table[0] -#+end_src - -| 1 | 2 | 3 | - -#+begin_src ruby :var table=sandbox :replace t -table -#+end_src - -| 1 | 2 | 3 | -| 4 | "schulte" | 6 | - -#+begin_src python :var table=sandbox :replace t -table -#+end_src - -| 1 | 2 | 3 | -| 4 | "schulte" | 6 | - -*** R - -#+begin_src R :replace t -a <- 9 -b <- 8 - -#+end_src - -#+begin_src R :replace t -x <- c(rnorm(10, mean=-3, sd=1), rnorm(10, mean=3, sd=1)) -x -#+end_src - -: -2.059712 -1.299807 -2.518628 -4.319525 -1.944779 -5.345708 -3.921314 -: -2.841109 -0.963475 -2.465979 4.092037 1.299202 1.476687 2.128594 -: 3.200629 1.990952 1.888890 3.561541 3.818319 1.969161 - - - -* COMMENT Commentary -I'm seeing this as like commit notes, and a place for less formal -communication of the goals of our changes. - -** Eric <2009-02-06 Fri 15:41> -I think we're getting close to a comprehensive set of objectives -(although since you two are the real R user's I leave that decision up -to you). Once we've agreed on a set of objectives and agreed on at -least to broad strokes of implementation, I think we should start -listing out and assigning tasks. - -** Eric <2009-02-09 Mon 14:25> -I've done a fairly destructive edit of this file. The main goal was -to enforce a structure on the document that we can use moving forward, -so that any future objective changes are all made to the main -objective list. - -I apologize for removing sections written by other people. I did this -when they were redundant or it was not clear how to fit them into this -structure. Rest assured if the previous text wasn't persisted in git -I would have been much more cautious about removing it. - -I hope that this outline structure should be able to remain stable -through the process of fleshing out objectives, and cashing those -objectives out into tasks. That said, please feel free to make any -changes that you see fit. - -** Dan <2009-02-12 Thu 10:23> - Good job Eric with major works on this file. - -** Eric <2009-02-22 Sun 13:17> -So I skipped ahead and got started on the fun part. Namely stubbing -out some of the basic functionality. Please don't take any of the -decisions I've made so far (on things like names, functionality, -design etc...) as final decisions, I'm of course open to and hoping -for improvement. - -So far [[file:litorgy/litorgy.el][litorgy.el]] and [[file:litorgy/litorgy-script.el][litorgy-script.el]] can be used to evaluate source -code blocks of simple scripting languages. It shouldn't be too hard -(any takers) to write a litorgy-R.el modeled after litorgy-script.el -to use for evaluating R code files. - -See the [[* litorgy.el beginning functionality][Sandbox]] for evaluable examples. - -** Eric <2009-02-23 Mon 15:12> -While thinking about how to implement the transfer of data between -source blocks and the containing org-mode file, I decided it *might* -be useful to explicitly support the existence of variables which exist -independent of source blocks or tables. I'd appreciate any -feedback... (see [[free explicit variables][free explicit variables]]) - -** Eric <2009-02-23 Mon 17:53> -So as I start populating this file with source code blocks I figure I -should share this... I don't know if you guys use [[http://code.google.com/p/smart-snippet/][yasnippet]] at all, -but if you do you might find this [[file:block][block-snippet]] org-mode snippet -useful (I use it all the time). - - * Buffer Dictionary LocalWords: DBlocks dblocks litorgy el eric