如何让R读取我的环境变量?

Jor*_*elf 22 linux ubuntu r environment-variables amazon-ec2

我在EC2现场实例上运行R,我需要R来终止实例并在脚本运行后取消现场请求.

为此,我已将"请求ID"设置为环境变量/.bashrc,我的计划是在脚本准备好后简单地将以下代码调用到R中

system("ec2-cancel-spot-instance-requests $SIR")
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是R没有"看到"我env从外部R 键入时看到的相同环境变量,因此命令不起作用.

我已经检查过,如果我在/etc/environmentR 处设置我的环境变量就能看到这些变量,但这是另一个问题.由于这些变量是动态的(每次创建专色实例时实例ID和请求ID都不同),我运行的脚本以下列形式创建它们:

export SIR=`cat /etc/ec2_instance_spot_id.txt`
Run Code Online (Sandbox Code Playgroud)

该文件包含动态ID的位置

那么,我如何将"动态"环境变量插入/etc/environment?或者,我如何让R读取环境变量/.bashrc

任何正确方向的提示将非常感谢!

Dir*_*tel 23

你想Sys.getenv()Sys.getenv("PATH"),说.

或者为你的例子,试试吧

SIR <- Sys.getenv("SIR")   
system(paste("ec2-cancel-spot-instance-requests",  SIR))
Run Code Online (Sandbox Code Playgroud)

至于在启动时设置变量,请参阅help(Startup)了解~/.Renvironment

  • 我使用`Sys.setenv()`完成了这项工作,并基本上将我的环境变量从外部R复制到R.虽然这使我的脚本工作,但我希望我能理解为什么有一整套不同的环境变量使用R (4认同)
  • 非常感谢德克抽出宝贵的时间。我遇到的问题是,当我执行例如 `names(s &lt;- Sys.getenv())` 时,则 `SIR` 不存在,当我执行 `SIR &lt;- Sys.getenv("SIR")` 时SIR 中什么都没有,但是当我退出 R 并执行“env”时,环境变量列表与我在“Sys.getenv()”时得到的环境变量列表完全不同,在那里我可以看到 SIR 和我需要的其他变量。我会看看“Renvironment”,再次非常感谢。 (3认同)

小智 9

使用Sys.getenv()您可以查看当前环境中列出的所有变量.

但是,它们与当前shell中使用的不同,例如.profile中指定的那些.

要为R设置变量,请.Renviron在主目录中创建一个文件并在那里写入

MYDIRECTORY="/home/wherever"
Run Code Online (Sandbox Code Playgroud)

重新启动R后,您将能够访问此变量

Sys.getenv("MYDIRECTORY")
Run Code Online (Sandbox Code Playgroud)


che*_*dog 7

我对 R 很陌生,但我的方法是这样的:我将项目级环境变量存储在一个.env文件中。为了使其在 R 中可访问,我使用了

> readRenviron(".env")
Run Code Online (Sandbox Code Playgroud)

然后访问特定变量

> Sys.getenv("RDS_UID")
Run Code Online (Sandbox Code Playgroud)

它工作得很好。