[R] Calling R functions in Delphi
Tom Backer Johnsen
backer at psych.uib.no
Wed Dec 6 23:44:49 CET 2006
Earl F. Glynn wrote:
> Thanks for the great example, Tom.
>
> "Tom Backer Johnsen" <backer at psych.uib.no> wrote in message
> news:4575AE08.8010304 at psych.uib.no...
>> Anna Belova wrote:
>
>>> We would like to call quantile() function from the R-package STATS in a
>>> Delphi program. If this is possible, could anyone provide us with an
>>> example?
>> It is possible, and in principle simple. The essentials: (1) Write a
>> file containing the something like a script in R with whatever
>> commands. (2) Start a process involving the execution of R with a
>> command line containing two arguments, the name of the command file
>> and the file where you want the output (results) to be. (3) wait for
>> the process to stop. So, here is a function (returns true if
>> everyhing worked OK) that does that:
>
> . . .
>
>> CreateOK := CreateProcess(Nil, PChar('R.exe ' + CommandLine), nil,
>> nil,False, CREATE_NEW_PROCESS_GROUP+NORMAL_PRIORITY_CLASS, nil,
>> nil, StartInfo, proc_info);
>
> I had to give the full path to the R executable to get this to work:
>
> CreateOK := CreateProcess(Nil, PChar('C:\Program
> Files\R\R-2.4.0\bin\R.exe ' + CommandLine), nil,
> nil,False, CREATE_NEW_PROCESS_GROUP+NORMAL_PRIORITY_CLASS, nil,
> nil, StartInfo, proc_info);
That (I think) would depend on whether the directory to the R.exe is
in the path for the Windows system you use (which I seem to remember I
added in my environment). In any case, I was looking for some kind of
an interface to R late last spring, and this was what I arrived at.
Which worked.
>
> I used Delphi 7 to test StartRAndWait with this button press event:
>
> procedure TForm1.Button1Click(Sender: TObject);
> VAR
> Command: STRING;
> begin
> Screen.Cursor := crHourGlass;
> TRY
> Command := 'CMD BATCH Sample.R SampleOutput.txt';
> StartRAndWait(Command);
> FINALLY
> Screen.Cursor := crDefault
> END
> end;
Looks sensible to me.
>
>
> Sample.R file
> =====================
> sink('quantile.txt')
> quantile(0:100)
> sink()
> =====================
>
> I used sink in the R script to isolate the output of the R quantile command
> to help any parsing of the output:
>
> SampleOutput.txt
> =====================
> R version 2.4.0 (2006-10-03)
> Copyright (C) 2006 The R Foundation for Statistical Computing
> ISBN 3-900051-07-0
>
> R is free software and comes with ABSOLUTELY NO WARRANTY.
> You are welcome to redistribute it under certain conditions.
> Type 'license()' or 'licence()' for distribution details.
>
> Natural language support but running in an English locale
>
> R is a collaborative project with many contributors.
> Type 'contributors()' for more information and
> 'citation()' on how to cite R or R packages in publications.
>
> Type 'demo()' for some demos, 'help()' for on-line help, or
> 'help.start()' for an HTML browser interface to help.
> Type 'q()' to quit R.
>
>> sink('quantile.txt')
>> quantile(0:100)
>> sink()
>
> =====================
>
>
> quantile.txt
> =====================
> 0% 25% 50% 75% 100%
> 0 25 50 75 100
> =====================
>
>
> Tinn-R is written in Delphi, so its source code should be a great example of
> a Delphi/R interface. I've never studied the source code -- that's been on
> my "to do" list for months --, but I'm guessing it uses RCOm, like
> Hans-Peter suggested. Nevertheless, Tom's example above may also be quite
> useful.
That is a good suggestion. I'll have to have a look at that. Thank you!
Tom
>
> efg
>
> Earl F. Glynn
> Scientific Programmer
> Stowers Institute for Medical Research
>
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
--
+----------------------------------------------------------------+
| Tom Backer Johnsen, Psychometrics Unit, Faculty of Psychology |
| University of Bergen, Christies gt. 12, N-5015 Bergen, NORWAY |
| Tel : +47-5558-9185 Fax : +47-5558-9879 |
| Email : backer at psych.uib.no URL : http://www.galton.uib.no/ |
+----------------------------------------------------------------+
More information about the R-help
mailing list