From ggrothendieck at gmail.com  Tue May 22 21:34:02 2012
From: ggrothendieck at gmail.com (Gabor Grothendieck)
Date: Tue, 22 May 2012 15:34:02 -0400
Subject: [Rd] Best way to locate R executable from within R?
In-Reply-To: <CAP01uRkaWr9jzYrkNLAGZMWwB75WCCf3rb6OQJxGA34gayYiYg@mail.gmail.com>
References: <CAFDcVCSbqCrF2hepKGC1n4BpdekBQcBg2B6+hSQFOZP9cgxq-g@mail.gmail.com>
	<CAP01uRm6PbqeKGUEM_rnTfWUbiZSpsfkE3Lqev30ATYEma5RNg@mail.gmail.com>
	<CAFDcVCSYxQgUTELOWG5DTFkMWhC1T5+6axem1ZzhV+EXinrhSQ@mail.gmail.com>
	<CAP01uRkaWr9jzYrkNLAGZMWwB75WCCf3rb6OQJxGA34gayYiYg@mail.gmail.com>
Message-ID: <CAP01uRnftUBUOYpSZFkcTUgTpxKEQpvq23n8voC-K-r-F+8FBA@mail.gmail.com>

On Tue, May 22, 2012 at 3:28 PM, Gabor Grothendieck
<ggrothendieck at gmail.com> wrote:
> 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 at 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")
> ))

So that the last one tried works on Windows too it should be:

Find(file.exists, c(
 ? commandArgs()[[1]],
 ? file.path(R.home("bin"), commandArgs()[[1]]),
 ? file.path(R.home("bin"), "R"),
   file.path(R.home("bin"), "R.exe")
))



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



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



[Rd] Best way to locate R executable from within R?
Gabor Grothendieck