2010-10-08 18 views
5

J'utilise R dans Ubuntu pour faire des appels système à l'aide system() pour des choses comme Préchauffage instances Amazon EC2, gestion des fichiers sur S3, etc. Si je commence à R à partir de la ligne de commande tout fonctionne bien. Mais si je lance R à partir d'un script en utilisant Rscript ou ESS, j'ai des problèmes avec les variables d'environnement qui ne sont pas définies.Définir les variables d'environnement pour system() dans R?

I Pensez cela est un problème avec moi pas correctement grokking où placer les variables d'environnement dans Ubuntu. Je pensais que le "bon endroit" (pour une certaine définition de "droite") était de définir les variables d'environnement utilisateur dans ~/.bashrc. C'est là que je mets des choses comme export EC2_HOME=/home/jd/ec2 mais quand j'exécute R du SST et faire des appels système, le script .bashrc n'est pas en cours d'exécution. J'ai essayé Googing au sujet et je vois beaucoup d'exégèse sur les variables d'environnement dans Ubuntu, comme this one. Ma réaction au genou est d'essayer chaque recommandation dans le fil mentionné ci-dessus et d'arrêter de donner une merde dès que l'une des options fonctionne. Mais ensuite je me retrouve avec des réglages non standards qui me mordent dans le cul plus tard.

Alors, comment dois-je définir des variables d'environnement afin qu'ils soient correctement réglés lorsque je lance un appel system() en R?

+0

wok, merci de votre aide pour le marquage! –

Répondre

6

Je pense que vous confondez la question. Je crains que cela ne concerne les shells de connexion et les shells non connectés. Voir la page de manuel de bash pour les petits caractères ... qui m'a conduit dans le passé.

Cela dit, si vous pouvez définir l'échelle du système des variables d'environnement, vous avez quelques options:

  • /etc/environment est un très bon endroit car il est shell agnostique si jamais vous utilisez un autre shell
  • pour la connexion par rapport à des coquillages non-connexion, la seule façon d'obtenir un contrôle complet que j'ai trouvé approprié était de mettre mes changements dans quelque chose comme ~/.local_bashrc
  • l'ajouter . ~/.local_bashrc de et et tous

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

    etc pp.

Vous pouvez précéder l'approvisionnement avec un echo Hello from FILE où vous remplacer le fichier avec le nom du fichier. Cela vous montre la différence entre les coques à partir de la connexion (par exemple via gdm et al), via la connexion ssh, via les nouveaux terminaux xterm et ainsi de suite.

+2

Merde bons conseils, comme toujours Dirk. J'ai été tenté de commencer à éditer '/ etc/environment' mais à chaque fois que je commence à faire quelque chose dans'/etc/', j'entends une voix accentuée dire très doucement que nous n'apprendrons pas très vite, n'est-ce pas? et je me suis un peu effrayé et reconsidéré ma décision de quitter la ferme familiale et de poursuivre la vie dans la grande ville. –

10

Vous pouvez essayer de les mettre en R s'utilisant Sys.setenv.

+0

bien merde. J'essayais de le faire grâce à l'approche d'Ubuntu et je n'avais pas réalisé qu'il y avait une approche R. Je vous remercie! –

+0

Et 'Renviron'. 'Renviron.site' et' ~/.Renviron'. –

0

Vous pouvez forcer le système à lire votre fichier .bashrc en utilisant la commande source

source ~/.bashrc 

Beaucoup de façons inélégant et laid d'appliquer cette