在R中为system()设置环境变量?

时间:2010-10-08 16:30:28

标签: r ubuntu system environment-variables bash

我一直在Ubuntu中使用R来使用system()进行系统调用,例如启动Amazon EC2实例,管理S3上的文件等。如果我从命令行启动R,一切正常。但是如果我使用Rscript或ESS从脚本启动R,我就会遇到环境变量未设置的问题。

认为这是一个问题,我没有正确地知道在Ubuntu中设置环境变量的位置。我认为“正确的位置”(对于“右”的某些定义)是在〜/ .bashrc中设置用户环境变量。这是我设置export EC2_HOME=/home/jd/ec2之类的东西,但是当我从ESS执行R并进行系统调用时,没有运行.bashrc脚本。我已经尝试了Googing,我在Ubuntu中看到很多关于环境变量的解释,例如this one。我的膝跳反应是尝试上述线程中的每个推荐,并在其中一个选项有效时立即停止发出错误。但后来我最终得到了非标准的设置,这些设置后来让我咬了屁股。

那么我应该如何设置环境变量,以便在R中运行system()调用时正确设置它们?

3 个答案:

答案 0 :(得分:10)

您可以尝试使用Sys.setenv在R中设置它们。

答案 1 :(得分:6)

我认为你混淆了这个问题。我担心这可能与登录shell和非登录shell有关。请参阅bash手册页,了解精美图片......过去曾让我感到疯狂。

也就是说,如果你可以在系统范围内设置环境变量,你有几个选择:

  • /etc/environment是一个非常好的地方,因为如果您使用不同的shell,它与shell无关
  • 对于登录与非登录shell,获得完全控制的一种方法是将我的更改放入~/.local_bashrc
  • 之类的内容中
  • 来自和/和

    的添加. ~/.local_bashrc
    • ~./bashrc
    • ~/.bash_profile
    • 〜/ .profile`

    etc pp。

您可以在采购之前使用echo Hello from FILE替换FILE和文件名。这显示了从登录开始的shell之间的区别(例如通过gdm等),通过ssh连接,通过新的xterm等终端等等。

答案 2 :(得分:0)

您可以使用源命令

强制系统读取.bashrc文件
source ~/.bashrc

很多不雅和丑陋的方式来应用这个