2010-10-08 13 views
5

Ho usato R in Ubuntu per effettuare chiamate di sistema usando system() per cose come girare su istanze Amazon EC2, gestire file su S3, ecc. Se avvio R dalla riga di comando, tutto funziona correttamente. Ma se avvio R da uno script usando Rscript, o da ESS, ho problemi con le variabili di ambiente non impostate.imposta variabili d'ambiente per system() in R?

I think questo è un problema con me non correttamente groking dove impostare le variabili di ambiente in Ubuntu. Pensavo che il "posto giusto" (per alcune definizioni di "giusto") fosse impostare le variabili d'ambiente dell'utente in ~/.bashrc. È qui che imposto cose come export EC2_HOME=/home/jd/ec2 ma quando eseguo R da ESS e faccio chiamate di sistema, lo script .bashrc non viene eseguito. Ho provato Googing e vedo molte esegesi sulle variabili d'ambiente in Ubuntu, come ad esempio this one. La mia reazione istintiva è di provare ogni suggerimento nel thread di cui sopra e smettere di dare una merda non appena una delle opzioni funziona. Ma poi finisco con impostazioni non standard che mi mordono nel culo in seguito.

Quindi, come devo impostare le variabili di ambiente in modo che siano impostate correttamente quando eseguo una chiamata system() in R?

+0

wok, grazie per l'aiuto con l'etichettatura! –

risposta

6

Penso che si sta confondendo la questione. Temo che questo possa riguardare le shell di login rispetto alle shell non di login. Vedi la pagina di manuale di bash per la stampa fine ... che mi ha fatto impazzire in passato.

Detto questo, se è possibile impostare le variabili di ambiente a livello di sistema, avete alcune opzioni:

  • /etc/environment è un posto molto buono in quanto è shell-agnostic si dovrebbe mai usare una shell diversa
  • per il login rispetto shell non-login, l'unico modo per ottenere il controllo completo che ho trovato adatto è stato quello di mettere i miei cambiamenti in qualcosa di simile ~/.local_bashrc
  • il aggiungere . ~/.local_bashrc da e e tutti

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

    ecc pp.

È possibile far precedere l'approvvigionamento con una echo Hello from FILE in cui si sostituisce file con il nome del file. Ciò mostra la differenza tra le shell che iniziano dal login (ad esempio tramite gdm e altri), tramite la connessione ssh, i nuovi terminali xterm ecc. E così via.

+2

Accidenti buoni consigli, come sempre Dirk. Sono stato tentato di iniziare a modificare '/ etc/environment', ma ogni volta che comincio a girare qualcosa con'/etc/'sento una voce accentata tedesca dire molto dolcemente che non stiamo imparando molto velocemente, vero? e mi faccio strisciare fuori e riconsiderare la mia decisione di lasciare la fattoria di famiglia e perseguire la vita nella grande città. –

10

È possibile provare a impostarli in R se stessi utilizzando Sys.setenv.

+0

bene merda. Stavo cercando di farlo attraverso l'approccio di Ubuntu e non avevo capito che c'era un approccio R. Grazie! –

+0

E 'Renviron'. 'Renviron.site' e' ~/.Renviron'. –

0

è possibile forzare il sistema per leggere il file .bashrc utilizzando il comando source

source ~/.bashrc 

Un sacco di modi poco eleganti e brutte per applicare questo