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

Duncan Murdoch murdoch.duncan at gmail.com
Wed Jun 29 21:24:08 CEST 2011


On 29/06/2011 3:15 PM, Janko Thyson wrote:
> 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?

We use the Inno Setup installer; it has a function for this.  Here's the 
code used:

Root: HKLM; Subkey: SYSTEM\CurrentControlSet\Control\Session 
Manager\Environment; ValueType: expandsz; ValueName: PATH; ValueData: 
"{code:getNewPath}"; Tasks: setPath

So I guess I do know what the registry key is.

>
> 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.

As far as I know that's fine with R.  It uses various .exe's in the 
bin/i386 or bin/x64 directories.  It doesn't use the path for anything 
beyond startup.

Duncan Murdoch

>
> 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