How can I make R read my environmental variables?

2020-03-08 07:27发布

I am running R on EC2 spot instances and I need R to terminate the instance and cancel the spot request once the script has run.

For that I have set the "Request ID" into an environmental variable in /.bashrc and my plan was to simply call the following code into R once the script is ready

system("ec2-cancel-spot-instance-requests $SIR")

The issue I am having is that R is not "seeing" the same environmental variables I seen when I type env from outside R thus the command is not working.

I have checked and if I set my environmental variables at /etc/environment R is able to see those variables, but here is the other problem. As those variables are dynamic (the instance ID and the request ID is different each time a spot instance is created), I am running a script to create them in the form of:

export SIR=`cat /etc/ec2_instance_spot_id.txt`

Where that file contains the dynamic ID

So, how can I insert "dynamic" environmental variables into /etc/environment ? Or, how can I make R read the environmental variables at /.bashrc?

Any tip in the right direction will be much appreciated!

3条回答
再贱就再见
2楼-- · 2020-03-08 07:59

Using Sys.getenv() you see all variables listed in the current environment.

However, they are different from those used in your current shell, for example specified in .profile.

To set the variables for R create a .Renviron file in your home directory and write there

MYDIRECTORY="/home/wherever"

After restarting R you will be able to access this variable with

Sys.getenv("MYDIRECTORY")
查看更多
不美不萌又怎样
3楼-- · 2020-03-08 08:05

I'm pretty new to R but my approach was this: I had project-level environment variables stored in a .env file. To make it accessible in R, I used

> readRenviron(".env")

Then to access a specific variable

> Sys.getenv("RDS_UID")

And it worked perfectly.

查看更多
男人必须洒脱
4楼-- · 2020-03-08 08:14

You want Sys.getenv() as in Sys.getenv("PATH"), say.

Or for your example, try

SIR <- Sys.getenv("SIR")   
system(paste("ec2-cancel-spot-instance-requests",  SIR))

As for setting variables at startup, see help(Startup) to learn about ~/.Renvironment etc

查看更多
登录 后发表回答