【问题标题】:How can I make R read my environmental variables?如何让 R 读取我的环境变量?
【发布时间】:2012-08-30 18:17:20
【问题描述】:

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

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

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

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

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

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

该文件包含动态 ID 的位置

那么,如何将“动态”环境变量插入到 /etc/environment 中?或者,如何让 R 读取 /.bashrc 处的环境变量?

任何正确方向的提示将不胜感激!

【问题讨论】:

  • 我发现 ~/.profile 中的变量可以从 Sys.getenv() 访问,但不能从 ~/.bashrc 访问。在添加新变量后,我必须从终端执行source ~/.profile,然后执行R 才能使其工作。

标签: linux r ubuntu amazon-ec2 environment-variables


【解决方案1】:

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

> readRenviron(".env")

然后去访问一个特定的变量

> Sys.getenv("RDS_UID")

而且效果很好。

【讨论】:

    【解决方案2】:

    使用Sys.getenv(),您会看到当前环境中列出的所有变量。

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

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

    MYDIRECTORY="/home/wherever"
    

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

    Sys.getenv("MYDIRECTORY")
    

    【讨论】:

    • 我的主目录没有 .Renviron 文件,并且在我几天前更改值后,它在 R 内部返回了环境变量的旧值。无法弄清楚 R 从哪里获取旧值并且没有返回新值。
    【解决方案3】:

    你想要Sys.getenv(),就像Sys.getenv("PATH")一样。

    或者你的例子,试试

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

    关于启动时设置变量,见help(Startup)了解~/.Renvironment

    【讨论】:

    • 非常感谢 Dirk 抽出宝贵时间。我遇到的问题是,当我做 names(s &lt;- Sys.getenv()) 时,SIR 不存在,当我做 SIR &lt;- Sys.getenv("SIR") 时,SIR 中什么都没有,但是当我退出 R 并且我做 env 时,环境列表变量与我在Sys.getenv() 时得到的完全不同,在那里我可以看到 SIR 和我需要的其他变量。我会看看Renvironment,再次非常感谢。
    • 好吧,这太丢人了。如果我已经创建了两个具有请求 ID 和实例 ID 的文件,为什么还要读取 R 中的环境变量?我可以获取这些文件的值并执行我的任务......这并不能解释为什么 R 没有看到与我退出 R 时看到的相同的环境变量,但会让我继续前进!感谢您的启发!
    • 我通过使用Sys.setenv() 并基本上将我的环境变量从 R 外部复制到 R 来完成这项工作。虽然这使我的脚本工作,但我希望我能理解为什么会有一整套不同的环境变量知道R
    猜你喜欢
    • 2018-07-01
    • 2017-09-04
    • 1970-01-01
    • 2012-08-11
    • 1970-01-01
    • 2015-08-29
    • 2015-05-18
    • 1970-01-01
    • 2012-05-16
    相关资源
    最近更新 更多