задайте променливи на средата за 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