Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

set environment variables for system() in R?

I've been using R in Ubuntu to make system calls using system() for things like spinning up Amazon EC2 instances, managing files on S3, etc. If I start R from the command line everything works fine. But if I start R from a script using Rscript, or from ESS, I have issues with environment variables not being set.

I think this is an issue with me not properly grokking where to set environment variables in Ubuntu. I thought the "right place" (for some definition of "right") was to set user environment variables in ~/.bashrc. This is where I set things like export EC2_HOME=/home/jd/ec2 but when I execute R from ESS and make system calls, the .bashrc script is not being run. I've tried Googing about and I see many an exegesis on environment variables in Ubuntu, such as this one. My knee jerk reaction is to try each recommendation in the aforementioned thread and stop giving a shit as soon as one of the options works. But then I end up with non-standard settings which bite me in the ass later.

So how should I set environment variables so that they are properly set when I run a system() call in R?

like image 356
JD Long Avatar asked Oct 08 '10 16:10

JD Long


2 Answers

You can try to set them in R itself using Sys.setenv.

like image 64
Joshua Ulrich Avatar answered Oct 25 '22 03:10

Joshua Ulrich


I think you are confusing the issue. I fear this may be about login shells versus non-login shells. See the bash manual page for the fine print ... which has driven me bonkers in the past.

That said, if you can set environment variables system-wide, you have a few options:

  • /etc/environment is a very good place as it is shell-agnostic should you ever use a different shell
  • for login versus non-login shells, the one way to get complete control that I found suitable was to put my changes into something like ~/.local_bashrc
  • the add . ~/.local_bashrc from and and all of

    • ~./bashrc
    • ~/.bash_profile
    • ~/.profile`

    etc pp.

You can precede the sourcing with a echo Hello from FILE where you replace FILE with the name of the file. That shows you the difference between shells starting from login (eg via gdm et al), via ssh connection, via new xterm etc terminals and so on.

like image 43
Dirk Eddelbuettel Avatar answered Oct 25 '22 02:10

Dirk Eddelbuettel