I think the most reliable solution is something like system(paste(shQuote(file.path(R.home("bin"),"R")), ...))
it supports spaces in paths and works both on unix and Windows, picking the proper architecture. Cheers, Simon On May 22, 2012, at 3:05 PM, Henrik Bengtsson wrote: > On Tue, May 22, 2012 at 11:39 AM, Gabor Grothendieck > <ggrothendi...@gmail.com> wrote: >> On Tue, May 22, 2012 at 1:34 PM, Henrik Bengtsson <h...@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 > >> >> -- >> Statistics & Software Consulting >> GKX Group, GKX Associates Inc. >> tel: 1-877-GKX-GROUP >> email: ggrothendieck at gmail.com >> >> ______________________________________________ >> R-devel@r-project.org mailing list >> https://stat.ethz.ch/mailman/listinfo/r-devel > > ______________________________________________ > R-devel@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel > > ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel