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

JD *_*ong 7 bash ubuntu r system environment-variables

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

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

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

Jos*_*ich 10

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


Dir*_*tel 7

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

也就是说,如果您可以在系统范围内设置环境变量,那么您有以下几种选择:

  • /etc/environment 是一个非常好的地方,因为如果你使用不同的shell,它是shell不可知的
  • 对于登录与非登录shell,获得我认为合适的完全控制的一种方法是将我的更改放入类似的内容中~/.local_bashrc
  • 添加. ~/.local_bashrc来自和所有

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

    等pp.

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

  • 该死的好小费,就像戴克一样.我很想开始编辑`/ etc/environment`,但每当我开始用'/ etc /'中的某些东西搞砸时,我听到一个德语口音的声音非常轻柔地说,学得不是很快,是吗?我有点慌张,重新考虑离开家庭农场并在大城市寻求生活的决定. (2认同)