From hjm at tacgi.com  Thu Jul 17 13:24:54 2003
From: hjm at tacgi.com (Harry Mangalam)
Date: Thu Jul 17 21:21:27 2003
Subject: [Rd] Integrating R in OpenOffice
In-Reply-To: <20030717100829.B5149@jessie.research.bell-labs.com>
References: <06B368F9-A8E5-11D7-A464-000393640F7A@gmu.edu>
	<3F15A0ED.70803@tacgi.com>
	<20030717100829.B5149@jessie.research.bell-labs.com>
Message-ID: <3F16F806.3030606@tacgi.com>

Hi Duncan,

thanks very much for your insights (and also for the previous help with 
RGnumeric, docs, etc, etc).  They answered my questions well and in the way I 
was hoping ;).  I'm really enthusiastic about digging into this more now.

I'm just starting in on the detailed UNO/UDK docs and examples myself and am 
just now downloading and doing the initial compilations required as an OO base 
development system, but as I find interesting or valuable bits, I'll send them 
your way as well to the other team members (also Simon Urbanek and Kevin B. 
Hendricks have expressed interest in helping out as well).

Harry

Duncan Temple Lang wrote:
> Hi Harry.
> 
>    Thanks for providing the details about the plan.  I'll try to take
> a look at some of the Open Office documents in the next week. For the
> most part, the inter-system interfaces are the same and only the
> mechanics are specific to the host.
> 
>   I hope OO doesn't require that we add _all_ S functions to a menu.
> If for no other reason, the user will be overwhelmed.  Gnumeric
> requires that we register them with the function manager at run-time
> which means we can tailor them to the particular session/application.
> What one typically wants is a way to tell OO that if it is looking for
> a function, ask R does it have that function.  There are a variety of
> issues about argument types, etc.  These aside, what we typically want
> to have is a that R is embedded in OO and the R-OO bridge provides a
> way to marshall a call from OO to R. And we also want a bi-directional
> interface so that R can access the OO sheet, etc. from R functions.
> 
> 
>   I'll try to briefly address the libR.so issues. 
> 
> 
> 
>>Some of the (many) things that I do not have a good grasp on are:
>>- which R functions are available to the calling app.  There is a list of 
>>functions listed in Chapter 5 of the "Writing R Extensions" doc.
>>But there is also a function defined as:
>>call_R(char*, long, void**, char**, long*, char**, long, char**);
>>which appears to provide access to all R functions.  Is this the case?
> 
> 
> 
> - If we have a routine that is responsible for marshalling all calls
> from OO to R, we can have it use call_R or alternatively construct and
> evaluate an R expression directly in C code. If you look in the
> RGnumeric.c file and specifically at the routine
> RGnumeric_fixedArgCall(), you'll see an example of the marshalling
> routine. This is a more explicit and flexible version of call_R()
> and will do error handling correctly!
> 
> 
>>- how do R and optional R packages (such as Bioconductor) interact via libR.so?
> 
> 
> - If you think of libR.so as simply being a way to embedd R into
> another application (just like we can load a library into R), then
> that version of R inside a host application runs exactly as it would
> as a stand-alone.  One loads any [optional] R package using the
> library() function in R and the R engine will take care of all the
> details, e.g. loading the .so/.dll for that library, the S code, etc.
> 
> The only important thing is that packages in which the C/Fortran code
> use routines in R must be installed after R has been built with
> libR.so enabled.  This is the default when R is configured with the
> --enable-R-shlib option and packages are subsequently installed.  Any
> package installed before R was built as a shared library may not work.
> 
> 
> 
>>- Do all optional packages have to be defined when building libR.so? (this 
>>doesn't sound right)  Or if not, how is libR.so informed that it has to load an 
>>additional package?
> 
> 
> No. They can be installed whenever needed.
> 
> Somebody will have to tell R to load that additional package when it
> is needed.  This can be done either in the startup script for R
> (i.e. Rprofile) or by the "user" of OO.  Typically, you will add a
> function to OO that will load the relevant R packages.  This function
> is your OO wrapper to the R functionality.
> 
> 
>>- Is this process integral to the runtime so that once Bioconductor or other 
>>package is installed via 'R INSTALL ..', libR.so can access them just like R?
> 
> 
> Yes. R and libR.so are almost exactly the same. From one point of
> view, the difference is how they start - R is a stand alone
> application that starts itself; libR.so is started by some other
> application.
> 
> 
>   This should be very interesting. I'll try to find some time to read
> the OO docs and help out.
> 
>   D.
> 
> 
> 
> 
> Harry Mangalam wrote:
> 
>>Hi All,
>>
>>A group of about 3-4 of us are looking into the possibility of incorporating R 
>>into OpenOffice's (OO) spreadsheet component (sc) .  We wish to use OO's nice 
>>ODBC ability to query a postgresql-based gene expression database thus 
>>populating an OO sc and then use Bioconductor via R to analyse user-selected 
>>parts of this spreadsheet.
>>
>>We've looked at and compiled and used RGnumeric (with Duncan's help) to see 
>>what's possible under Gnumeric, but AFAIK gnumeric won't have DB connectivity 
>>for some time and has neither the finish nor the integration of OO.
>>
>>We've reviewed quite a few documents that describe the integration approach and 
>>while it seems to be a bit complex (mostly due to UNO - OO's CORBA-like 
>>integration strategy), it seems to be quite doable.
>>
>>We envision it working ike this:
>>
>>- build R as a shared lib - libR.so [trivial - the R team has done this for us]
>>
>>- use the UNO framework to direct the writing of an IDL that allows libR.so to 
>>be linked into the OO sc runtime [time consuming to digest all the docs and get 
>>a feel for how to do this, altho there are some introductory docs at: 
>>http://sc.openoffice.org/addin_howto.html
>>
>>- write code that will automate the insertion of available R functions into the 
>>OO sc menu system. [possibly tricky but mostly tedious..?]
>>
>>- write the query interface to the database within OO [pretty easy]
>>
>>Some of the (many) things that I do not have a good grasp on are:
>>- which R functions are available to the calling app.  There is a list of 
>>functions listed in Chapter 5 of the "Writing R Extensions" doc.
>>But there is also a function defined as:
>>call_R(char*, long, void**, char**, long*, char**, long, char**);
>>which appears to provide access to all R functions.  Is this the case?
>>
>>- how do R and optional R packages (such as Bioconductor) interact via libR.so?
>>
>>- Do all optional packages have to be defined when building libR.so? (this 
>>doesn't sound right)  Or if not, how is libR.so informed that it has to load an 
>>additional package?
>>
>>- Is this process integral to the runtime so that once Bioconductor or other 
>>package is installed via 'R INSTALL ..', libR.so can access them just like R?
>>
>>
>>
>>-- 
>>Cheers, Harry
>>Harry J Mangalam - 949 856 2847 (v&f) - hjm@tacgi.com
>>             <<plain text preferred>>
>>
>>______________________________________________
>>R-devel@stat.math.ethz.ch mailing list
>>https://www.stat.math.ethz.ch/mailman/listinfo/r-devel
> 
> 

-- 
Cheers, Harry
Harry J Mangalam - 949 856 2847 (v&f) - hjm@tacgi.com
             <<plain text preferred>>
         Go Dennis! http://www.kucinich.us


[Rd] Integrating R in OpenOffice
Harry Mangalam