установить переменные среды для system() в R?

Я использовал R в Ubuntu для выполнения системных вызовов с использованием system() для таких вещей, как запуск экземпляров Amazon EC2, управление файлами на S3 и т. д. Если я запускаю R из командной строки, все работает нормально. Но если я запускаю R из сценария, использующего Rscript, или из ESS, у меня возникают проблемы с неустановленными переменными среды.

Я думаю, что это проблема, связанная с тем, что я неправильно понимаю, где устанавливать переменные среды в Ubuntu. Я думал, что «правильным местом» (для некоторого определения «правильного») было установить переменные среды пользователя в ~/.bashrc. Здесь я устанавливаю такие вещи, как export EC2_HOME=/home/jd/ec2, но когда я запускаю R из ESS и делаю системные вызовы, сценарий .bashrc не запускается. Я пытался поискать в Google и вижу много толкований переменных окружения в Ubuntu, таких как один. Моя рефлекторная реакция состоит в том, чтобы попробовать каждую рекомендацию в вышеупомянутой ветке и перестать париться, как только один из вариантов сработает. Но тогда я получаю нестандартные настройки, которые потом кусают меня за задницу.

Итак, как мне установить переменные среды, чтобы они правильно устанавливались, когда я запускаю вызов system() в R?


person JD Long    schedule 08.10.2010    source источник


Ответы (3)


Я думаю, вы путаете вопрос. Я боюсь, что это может быть связано с оболочками для входа в систему по сравнению с оболочками без входа в систему. См. страницу руководства bash для мелкого шрифта ... который сводил меня с ума в прошлом.

Тем не менее, если вы можете установить переменные среды для всей системы, у вас есть несколько вариантов:

  • /etc/environment - очень хорошее место, так как оно не зависит от оболочки, если вы когда-либо будете использовать другую оболочку.
  • для оболочек с входом и без входа единственный способ получить полный контроль, который я счел подходящим, — это поместить мои изменения в что-то вроде ~/.local_bashrc
  • добавить . ~/.local_bashrc из и и все из

    • ~./bashrc
    • ~/.bash_profile
    • ~/.профиль`

    и т.д. стр.

Перед источником можно поставить echo Hello from FILE, где вы замените FILE на имя файла. Это показывает вам разницу между оболочками, начиная с входа в систему (например, через gdm и др.), через ssh соединение, через новые терминалы xterm и т.д. и так далее.

person Dirk Eddelbuettel    schedule 08.10.2010
comment
Чертовски хорошие советы, как всегда Дирк. У меня было искушение начать редактировать /etc/environment, но каждый раз, когда я начинаю что-то возиться с /etc/, я слышу, как голос с немецким акцентом очень тихо говорит: «Не очень быстро учишься, не так ли?» и мне становится немного страшно, и я пересматриваю свое решение покинуть семейную ферму и жить в большом городе. - person JD Long; 08.10.2010

Вы можете попробовать установить их в самом R, используя Sys.setenv.

person Joshua Ulrich    schedule 08.10.2010
comment
ну дерьмо. Я пытался сделать это с помощью подхода Ubuntu и не знал, что существует подход R. Благодарю вас! - person JD Long; 08.10.2010
comment
И Renviron. Renviron.site и ~/.Renviron. - person Dirk Eddelbuettel; 24.11.2015

Вы можете заставить систему прочитать ваш файл .bashrc с помощью исходной команды

source ~/.bashrc

Много неэлегантных и уродливых способов применить это

person Brian Douglas Smith    schedule 08.10.2010