From mboxrd@z Thu Jan 1 00:00:00 1970 From: Rainer M Krug Subject: Re: [babel] Writing R-packages the org way? Date: Fri, 8 Oct 2010 17:35:20 +0200 Message-ID: References: <4CADD83B.4000602@ccbr.umn.edu> <8762xeniy6.fsf@stats.ox.ac.uk> <4CADE357.1090803@ccbr.umn.edu> <87pqvlncsk.fsf@stats.ox.ac.uk> <87fwwglwbi.fsf@stats.ox.ac.uk> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="===============0487931015==" Return-path: Received: from [140.186.70.92] (port=52148 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1P4Eyh-0005Bb-NT for emacs-orgmode@gnu.org; Fri, 08 Oct 2010 11:35:25 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1P4Eyf-0005TA-RQ for emacs-orgmode@gnu.org; Fri, 08 Oct 2010 11:35:23 -0400 Received: from mail-qy0-f169.google.com ([209.85.216.169]:58744) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1P4Eyf-0005T4-N5 for emacs-orgmode@gnu.org; Fri, 08 Oct 2010 11:35:21 -0400 Received: by qyk31 with SMTP id 31so107274qyk.0 for ; Fri, 08 Oct 2010 08:35:20 -0700 (PDT) In-Reply-To: <87fwwglwbi.fsf@stats.ox.ac.uk> List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: Dan Davison Cc: emacs-orgmode , "Charles C. Berry" --===============0487931015== Content-Type: multipart/alternative; boundary=00c09f88d07822104804921cc2cf --00c09f88d07822104804921cc2cf Content-Type: text/plain; charset=ISO-8859-1 On Fri, Oct 8, 2010 at 2:10 PM, Dan Davison wrote: > Hi Chuck, > > I agree about making use of existing ESS tools and that a more > traditional Org approach might be appropriate. > OK. But I think I have a solution for the "One package in a single org file" approach - see below > > > If you do decide to go all in for a 'one org file makes one package' > > approach, you might try to get Rd language support added, so you can > > edit Rd directly in an Org Src buffer in Rd-mode. > > No extra code is needed to get editing support for languages. > #+begin_src XXX > > provides an edit buffer in XXX-mode automatically, with no special > customization. Also fontification in the org buffer works automatically > if `org-src-fontify-natively' is set. > Agreed - and that is the key to it. If one is using the post-tangle-hook to compile / check the package, the fuinctiona;ity is together: Example, the name of the org file will be used as the packagename: ------------BEGIN----------------------- * Internal configurations :noexport: ** Post tangle script #+begin_src sh :tangle postTangleScript.sh :var PACKAGENAME=(or (buffer-file-name) org-current-export-file) R CMD CHECK $PACKAGENAME #+end_src ** Evaluate to run post tangle script #+begin_src emacs-lisp :results silent :tangle no :exports none (add-hook 'org-babel-post-tangle-hook ( lambda () (call-process-shell-command "./postTangleScript.sh" nil 0 nil) ) ) #+end_src * Package description #+begin_src :tangle ./PACKAGENAME/DESCRIPTION #+end_src * Content of the package ** Function1 *** man #+begin_src Rd :tangle ./PACKAGENAME/man/Function1.Rd #+end_src *** Code #+begin_src R :tangle ./PACKAGENAME/R/Function1.R #+end_src *** Tests #+begin_src R :tangle ./PACKAGENAME/tests/Function1Tests.R #+end_src The output from the test needs to be saved in ./PACKAGENAME/tests/Function1Tests.R - I still have to think about that. ** Function2 *** man #+begin_src Rd :tangle ./PACKAGENAME/man/Function2.Rd #+end_src *** Code #+begin_src R :tangle ./PACKAGENAME/R/Function2.R #+end_src *** Tests #+begin_src R :tangle ./PACKAGENAME/tests/Function2Tests.R #+end_src The output from the test needs to be saved in ./PACKAGENAME/tests/Function2Tests.R - I still have to think about that. ** data #+begin_src ... #+end_src This depends on the type of the data. ------------END----------------------- This is untested so far, but I will try it out. The only thing which would be nice, would be to automate a few things. Cheers, Rainer > > Dan > > > And get > > org-babel-Rd-evaluate to run Rd-preview-help or call Rd2HTML or > > whatnot. > > > > HTH, > > > > Chuck > > > >> Then, to insert a template, you can use > >> > >> #+call: R-pkg-template(function_name="do.something") :results output org > raw > >> > >> which should give something like this: > >> > >> --8<---------------cut here---------------start------------->8--- > >> #+results: R-pkg-template(function_name="do.something") > >> * do.something > >> ** Help > >> *** Title > >> this is do.something title > >> *** Description > >> do.something does this... > >> *** Usage > >> do.something(arg1, arg2, ...) > >> *** Arguments > >> arg1: the first argument > >> *** Examples > >> do.something(arg1 = x, arg2 = y) > >> ** Definition > >> begin_src R :tangle R/package.R > >> do.something <- function(arg1, arg2) { > >> > >> } > >> --8<---------------cut here---------------end--------------->8--- > >> > >> While playing about you may want to get rid of the "raw" directive so > >> that the results will automatically be replaced on repeated evaluations. > >> > >> Dan > >> > >>> > >>> > >>> > >>>> > >>>>>> Any suggestions how to best proceed? > >>>>>>> > >>>>>>> Dream: I would like to have one org file which contains everything > >>>>>>> (documentation, code, other relevant files) and if I export or > >>>>>>> tangle the file, I have the package ready. > >>>>>>> > >>>>>> Well, that functionality is essentially present with code blocks > >>>>>> and tangling, except the documentation part. > >>>>>> > >>>>> > >>> Exactly - and that is the part I would like to have. > >>> > >>> > >>>> > >>>>> Hi Erik, > >>>>> > >>>>> Would you mind expanding on that -- what are we missing for the > >>>>> documentation part? > >>>>> > >>>>> > >>>> Dan, by "except for the documentation part", I meant generating > >>>> .Rd files (the LaTeX-like syntax) automatically from some org-syntax > >>>> that does *not* depend on code blocks. I.e., it would be cool to > >>>> specify syntax like I have above for documentation. Using org-mode > >>>> headlines for each section like Description, Usage, Arguments, etc. > >>>> > >>>> Just like exporting to LaTeX generates sections, some process would > >>>> use these headlines to generate the .Rd sections. > >>>> > >>>> That way, you don't have to use the .Rd syntax yourself. No big deal, > >>>> just a convenience feature. I don't know how you'd specify to > org-mode > >>>> that a particular subtree was to generate .Rd syntax, and I don't know > >>>> if it would be on export or tangling. > >>>> > >>>> An alternative is simply just to use code blocks of type Rd within > >>>> org-mode and then tangle to .Rd files. That's what I currently do. > >>>> > >>>> Hope that explains it, > >>>> Erik > >>>> > >>>> > >>>> Dan > >>>>> > >>>> > >> > >> _______________________________________________ > >> Emacs-orgmode mailing list > >> Please use `Reply All' to send replies to the list. > >> Emacs-orgmode@gnu.org > >> http://lists.gnu.org/mailman/listinfo/emacs-orgmode > >> > > > > Charles C. Berry (858) 534-2098 > > Dept of Family/Preventive > Medicine > > E mailto:cberry@tajo.ucsd.edu UC San Diego > > http://famprevmed.ucsd.edu/faculty/cberry/ La Jolla, San Diego > 92093-0901 > > > > > > > > _______________________________________________ > > Emacs-orgmode mailing list > > Please use `Reply All' to send replies to the list. > > Emacs-orgmode@gnu.org > > http://lists.gnu.org/mailman/listinfo/emacs-orgmode > -- NEW GERMAN FAX NUMBER!!! Rainer M. Krug, PhD (Conservation Ecology, SUN), MSc (Conservation Biology, UCT), Dipl. Phys. (Germany) Centre of Excellence for Invasion Biology Natural Sciences Building Office Suite 2039 Stellenbosch University Main Campus, Merriman Avenue Stellenbosch South Africa Cell: +27 - (0)83 9479 042 Fax: +27 - (0)86 516 2782 Fax: +49 - (0)321 2125 2244 email: Rainer@krugs.de Skype: RMkrug Google: R.M.Krug@gmail.com --00c09f88d07822104804921cc2cf Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable

On Fri, Oct 8, 2010 at 2:10 PM, Dan Davi= son <davison@stats.ox.ac.uk> wrote:
Hi Chuck,

I agree about making use of existing ESS tools and that a more
traditional Org approach might be appropriate.

OK. But I think I have a solution for the "One package in a si= ngle org file" approach - see below
=A0

> If you do decide to go all in for a 'one org file makes one packag= e'
> approach, you might try to get Rd language support added, so you can > edit Rd directly in an Org Src buffer in Rd-mode.

No extra code is needed to get editing support for languages.=A0

#+begin_src XXX

provides an edit buffer in XXX-mode automatically, with no special
customization. Also fontification in the org buffer works automatically
if `org-src-fontify-natively' is set.

Agreed - and that is the key to it.

If one= is using the post-tangle-hook to compile / check the package, the fuinctio= na;ity is together:

Example, the name of the org file will be used as the p= ackagename:
------------BEGIN-----------------------
* Internal configurations =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0:noexport:
=
** Post tangle script
#+begin_src sh :tangle postTangleScript.sh :var PACKAGENAME=3D(or (buf= fer-file-name) org-current-export-file)
=A0=A0R CMD CHECK = $PACKAGENAME
#+end_src

** Evaluate to run po= st tangle script
#+begin_src emacs-lisp :results silent :tangle no :exports none=
=A0=A0(add-hook 'org-babel-post-tangle-hook
=A0=A0 =A0 =A0 =A0 =A0 =A0(
=A0=A0 =A0 =A0 =A0 =A0 = =A0 lambda ()=A0
=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0(call-process-shell-command "./postTangleScript.sh" nil 0 nil)=
=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0)
=A0=A0 = =A0 =A0 =A0 =A0 =A0)
#+end_src

* Package description
#+begin_s= rc :tangle ./PACKAGENAME/DESCRIPTION
#+end_src
* Content of the package
<= font class=3D"Apple-style-span" face=3D"'courier new', monospace">*= * Function1
*** man
#+begin_src Rd :tangle ./PACKAGENAME/man/Func= tion1.Rd
#+end_src

*** Code
#+begin_src R :tangle ./PACKAGENAME/R/Function1.R
#+e= nd_src

*** Tests
#+begin_src R :tangle= ./PACKAGENAME/tests/Function1Tests.R
#+end_src

The output from the t= est needs to be saved in ./PACKAGENAME/tests/Function1Tests.R - I still hav= e to think about that.

** Function2
*** man
#+begin_src Rd :tangle ./PACKAGENAME/man/Function2.Rd
#+end_src

*** Code
#+begin_src R :tangle = ./PACKAGENAME/R/Function2.R
#+end_src

*** Tests
#+begin_src R :tangle ./PACKAGENAME/tests/Function2Tests.R
#+end_src

The output from the test needs to be saved in ./= PACKAGENAME/tests/Function2Tests.R - I still have to think about that.

** data
#+begin_src ...<= /div>
#+end_src

This depends on the t= ype of the data.



------------END----------= -------------
=A0
This is untested so far, but I will t= ry it out. The only thing which would be nice, would be to automate a few t= hings.

Cheers,

Rainer

=A0

Dan

> And get
> org-babel-Rd-evaluate to run Rd-preview-help or call Rd2HTML or
> whatnot.
>
> HTH,
>
> Chuck
>
>> Then, to insert a template, you can use
>>
>> #+call: R-pkg-template(function_name=3D"do.something") := results output org raw
>>
>> which should give something like this:
>>
>> --8<---------------cut here---------------start------------->= ;8---
>> #+results: R-pkg-template(function_name=3D"do.something"= )
>> * do.something
>> ** Help
>> *** Title
>> =A0 =A0this is do.something title
>> *** Description
>> =A0 =A0do.something does this...
>> *** Usage
>> =A0 =A0do.something(arg1, arg2, ...)
>> *** Arguments
>> =A0 =A0arg1: the first argument
>> *** Examples
>> =A0 =A0do.something(arg1 =3D x, arg2 =3D y)
>> ** Definition
>> =A0 =A0begin_src R :tangle R/package.R
>> =A0 =A0do.something <- function(arg1, arg2) {
>>
>> =A0 =A0}
>> --8<---------------cut here---------------end--------------->= ;8---
>>
>> While playing about you may want to get rid of the "raw"= directive so
>> that the results will automatically be replaced on repeated evalua= tions.
>>
>> Dan
>>
>>>
>>>
>>>
>>>>
>>>>>> =A0Any suggestions how to best proceed?
>>>>>>>
>>>>>>> Dream: I would like to have one org file which= contains everything
>>>>>>> (documentation, code, other relevant files) an= d if I export or
>>>>>>> tangle the file, I have the package ready.
>>>>>>>
>>>>>> Well, that functionality is essentially present wi= th code blocks
>>>>>> and tangling, except the documentation part.
>>>>>>
>>>>>
>>> Exactly - and that is the part I would like to have.
>>>
>>>
>>>>
>>>>> Hi Erik,
>>>>>
>>>>> Would you mind expanding on that -- what are we missin= g for the
>>>>> documentation part?
>>>>>
>>>>>
>>>> Dan, by "except for the documentation part", I m= eant generating
>>>> .Rd files (the LaTeX-like syntax) automatically from some = org-syntax
>>>> that does *not* depend on code blocks. =A0I.e., it would b= e cool to
>>>> specify syntax like I have above for documentation. =A0Usi= ng org-mode
>>>> headlines for each section like Description, Usage, Argume= nts, etc.
>>>>
>>>> Just like exporting to LaTeX generates sections, some proc= ess would
>>>> use these headlines to generate the .Rd sections.
>>>>
>>>> That way, you don't have to use the .Rd syntax yoursel= f. =A0No big deal,
>>>> just a convenience feature. =A0I don't know how you= 9;d specify to org-mode
>>>> that a particular subtree was to generate .Rd syntax, and = I don't know
>>>> if it would be on export or tangling.
>>>>
>>>> An alternative is simply just to use code blocks of type R= d within
>>>> org-mode and then tangle to .Rd files. =A0That's what = I currently do.
>>>>
>>>> Hope that explains it,
>>>> Erik
>>>>
>>>>
>>>> =A0Dan
>>>>>
>>>>
>>
>> _______________________________________________
>> Emacs-orgmode mailing list
>> Please use `Reply All' to send replies to the list.
>> Emacs-o= rgmode@gnu.org
>> http://lists.gnu.org/mailman/listinfo/emacs-orgmode
>>
>
> Charles C. Berry =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0(858) 534-2098
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 Dept of Family/Preventive Medicine
> E mailto:cbe= rry@tajo.ucsd.edu =A0 =A0 =A0 =A0 =A0 =A0 UC San Diego
> http://famprevmed.ucsd.edu/faculty/cberry/ =A0La Jolla, San Diego 92= 093-0901
>
>
>
> _______________________________________________
> Emacs-orgmode mailing list
> Please use `Reply All' to send replies to the list.
> Emacs-orgmo= de@gnu.org
> http://lists.gnu.org/mailman/listinfo/emacs-orgmode



--
NEW GERMAN = FAX NUMBER!!!

Rainer M. Krug, PhD (Conservation Ecology, SUN), MSc (= Conservation Biology, UCT), Dipl. Phys. (Germany)

Centre of Excellen= ce for Invasion Biology
Natural Sciences Building
Office Suite 2039
Stellenbosch UniversityMain Campus, Merriman Avenue
Stellenbosch
South Africa

Cell:= =A0 =A0 =A0 =A0 =A0=A0 +27 - (0)83 9479 042
Fax:=A0 =A0 =A0 =A0 =A0 =A0 = +27 - (0)86 516 2782
Fax:=A0 =A0 =A0 =A0 =A0 =A0 +49 - (0)321 2125 2244
email:=A0 =A0 =A0 =A0= =A0 Rainer@krugs.de

Skype:=A0 =A0 =A0 =A0 =A0 RMkrug
Google:=A0 =A0 =A0 =A0=A0
R.M.Krug@gmail.com=

--00c09f88d07822104804921cc2cf-- --===============0487931015== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Emacs-orgmode mailing list Please use `Reply All' to send replies to the list. Emacs-orgmode@gnu.org http://lists.gnu.org/mailman/listinfo/emacs-orgmode --===============0487931015==--