Re: [Rd] Best way to locate R executable from within R?

From: Gabor Grothendieck <ggrothendieck_at_gmail.com>
Date: Tue, 22 May 2012 15:28:26 -0400

On Tue, May 22, 2012 at 3:05 PM, Henrik Bengtsson <hb_at_biostat.ucsf.edu> wrote:

> On Tue, May 22, 2012 at 11:39 AM, Gabor Grothendieck
> <ggrothendieck_at_gmail.com> wrote:

>> On Tue, May 22, 2012 at 1:34 PM, Henrik Bengtsson <hb@biostat.ucsf.edu> wrote:
>>> Hi,
>>>
>>> I'd like to spawn of a new R process from within R using system(),
>>> e.g. system("R -f myScript.R").  However, just specifying "R" as in
>>> that example is not guaranteed to work, because "R" may not be on the
>>> OS's search path.
>>>
>>>  What is the best way, from within a running R, to infer the command
>>> (basename or full path) for launching R in way that it works on any
>>> OS?  I came up with the following alternatives, but I'm not sure if
>>> they'll work everywhere or not:
>>>
>>> 1. Rbin <- commandArgs()[1];
>>>
>>> 2. Rbin <- file.path(R.home(), "bin", "R");
>>>
>>> Other suggestions that are better?
>>>
>>
>> At least on Windows one could run R via R.exe, Rterm.exe or Rgui.exe
>> amd #2 would not pick up the differences.  On the other hand if I do
>> this on the Windows command line on my Vista system with R 2.15.0
>> patched:

>>
>> cd \program files\R\R-2.15.x\bin\i386
>> Rterm.exe
>>
>> and then enter commandArgs() into R, the output is "Rterm.exe" with no path.

>
> Thanks, I overlooked this need.  For my particular use case, I'm
> interested in launching R in "batch" mode, so "R" will do (but not
> "Rgui").
>

>>
>> The fact that one can have 32 bit and 64 bit R executables on the same
>> system complicates things too.
>>
>> Thus, on Windows something like this might work:

>>
>>   file.path(R.home("bin"), R.version$arch, basename(commandArgs()[[1]]))
>>
>> If there are cases that I missed then this might pick up those too:

>>
>>   R <- commandArgs()[[1]]
>>   if (R == basename(R)) R <- file.path(R.home("bin"), R.version$arch, R)

>
> FYI, R.home("bin") is not the same as file.path(R.home(), "bin"), cf.
> help("R.home").  R.home("bin") will pick up the current architecture
> directory (by using .Platform$r_arch), e.g.
>

>> R.home("bin")
> [1] "C:/PROGRA~1/R/R-2.15.0patched/bin/x64"
>
> /Henrik
>

Then perhaps something like this which is still not 100% foolproof but should work most of the time:

Find(file.exists, c(

   commandArgs()[[1]],
   file.path(R.home("bin"), commandArgs()[[1]]),    file.path(R.home("bin"), "R")
))

-- 
Statistics & Software Consulting
GKX Group, GKX Associates Inc.
tel: 1-877-GKX-GROUP
email: ggrothendieck at gmail.com

______________________________________________
R-devel_at_r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
Received on Tue 22 May 2012 - 19:32:28 GMT

This quarter's messages: by month, or sorted: [ by date ] [ by thread ] [ by subject ] [ by author ]

All messages

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Tue 22 May 2012 - 20:41:41 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-devel. Please read the posting guide before posting to the list.

list of date sections of archive