FrageR: system() kann nicht bash Funktion definiert in Bashrc
Mein Standard-Python ist 2.7, aber ich habe ein Skript, das Python erfordert 3.4 verwenden. Ich versuche, eine Funktion in R zu erstellen, wird:
- Umschalten auf Python 3.4
- Führen Sie dieses Skript
- Wechseln Sie wieder zu Python 2.7
- Import Ergebnisse in R
zu Wechseln Sie zwischen Python-Versionen, ich verwende das "dotkit" -System meines Clusters wie folgt:
use Python-2.7
use Python-3.4
"Verwenden" ist eine Bash-Funktion, die in meine .bashrc-Datei importiert wird. Es setzt alle meine Pfadvariablen (PATH, LIBRARY_PATH, LD_LIBRARY_PATH, CPATH, C_INCLUDE_PATH usw.). Das Problem ist, dass wenn ich versuche, diese Funktion in R zu nennen, ich die folgende Fehlermeldung erhalten:
system('use Python-3.4')
sh: use: command not found
Es scheint, wie dies ein Problem mit meinem PATH ist. Ich verwende die richtige Shell:
system('echo $SHELL')
/bin/bash
Meine $ PATH-Variable sieht auch gut aus. Allerdings, wenn ich ein Skript erstellen, das im Wesentlichen die gleiche Sache tut:
load_py34.sh:
#!/bin/bash
source ~/.bashrc
use Python-3.4
und dieses Skript durch R nennen, dann ist es tatsächlich läuft, aber aus irgendeinem Grund, es nicht ändern meine python-Version innerhalb R. (I überprüft haben, dass dieses Skript von der Kommandozeile funktioniert.)
> R
> system('python --version')
Python 2.7.1
> system('sh load_py34.sh')
Prepending: R-3.4 (ok)
> system('python --version')
Python 2.7.1
Also ich bin ein wenig verwirrt, aber wenn jemand helfen kann, würde ich wirklich zu schätzen.
Empfohlene Fixes
Als ich sie in einen einzigen Befehl kombiniert, ich habe immer noch das gleiche Problem:
> system("sh load_py34.sh; python --version")
Prepending: Python-3.4 (already loaded)
Python 2.7.1
Wenn es bash direkt versuchen anrufen, ich habe immer noch ein Problem mit dem PFAD:
> system("bash -c 'use Python-3.4; python --version'")
bash: use: command not found
Python 2.7.1
Wenn ich sie in einem einzigen Aufruf kombinieren, bekomme ich den gleichen Fehler. Ich werde die Frage aktualisieren, um dies zu berücksichtigen. –