[R] Update MS Windows PATH variable based on a R script

Janko Thyson janko.thyson.rstuff at googlemail.com
Wed Jun 29 21:15:34 CEST 2011


On 29.06.2011 20:58, Duncan Murdoch wrote:
> On 29/06/2011 2:24 PM, Janko Thyson wrote:
>> Dear list,
>>
>> this is not directly an R question, but it is somewhat related to R
>> aspects, so I hope it's okay to post it here:
>>
>> I'd like to update my windows PATH based on a script routine in order to
>> make sure that crucial components are contained. Much like what happens
>> at the installation of Rtools (if desired). Now, can you do that from
>> within R or do I need some sort of windows batch file or something like
>> AutoIt script (http://www.autoitscript.com/site/autoit/)? If so, what
>> would I need to put in there?
>
> You need to set the registry entry if you want a persistent change to 
> the PATH.  Sys.setenv just modifies R's copy of the PATH.  Child 
> processes will see the modifications, but they don't last beyond the R 
> session.
>
> You'll have to check MS docs to find which registry entry to mess 
> with.  Alternatively, if you feel lucky, just use Control Panel to set 
> some strange path, then see where your change showed up using regedit.
>
> R doesn't have a built-in function to write to the registry, but there 
> are various utilities available outside of R to do it.
>
> Duncan Murdoch

Thanks for the quick answer!
Would you mind sharing how you do it with the Rtools Windows installer? 
Or is that too much bound to installer details and can't be secluded 
very well?

The motivation behind this is that I came to love applications that can 
be run portably (i.e. apps that don't write anything to the Windows 
registry and can therefore be easily be "installed" on a USB drive, for 
example). That works just fine with R, my IDE Eclipse and also Rtools. 
The problem is that I need a batch script that optionally checks under 
which letter my USB drive is mounted and updates the relevant paths to 
Rtools binaries in my Windows PATH to make it somewhat "dynamical". Of 
course I'd like to clean everything up once my R-session terminates so I 
can reset the Windows PATH to it's original state once I'm finished 
working at a specific PC.

What I also just thought of: is there some way to specify relative and 
not absolute paths in the windows PATH? I know that this works when you 
have an .exe as a reference point (e.g. '..\somedir\' goes up one 
directory relative to the directory where the .exe is called and then 
moves into 'somedir'). But since there is no such thing as an .exe 
involved, there's probably no way to do it.

But thanks for the info, I'll have a look at MS specific documentation 
to get the job done.

Regards,
Janko
>
>>
>> Here's what I tried in R:
>>
>> unlist(strsplit(Sys.getenv("PATH"), ";"))
>> PATH.0<- Sys.getenv("PATH")
>> PATH.1<- paste(PATH.0, "C:\\blabla\bin")
>> Sys.setenv("PATH"=PATH.1)
>> unlist(strsplit(Sys.getenv("PATH"), ";"))
>>
>> The changes seem to be reflected, but when I check my PATH the new entry
>> isn't there. I guess there is no actual "feedback" to Windows system
>> environment variable and that's exactly what I would like to accomplish
>>
>> Thanks a lot for any advice,
>> Janko
>>
>> ______________________________________________
>> R-help at r-project.org 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.
>
>



More information about the R-help mailing list