2016-06-20 12 views
1

Also arbeite ich gerade an einem einfachen Python-Code, um ein einfaches R-Skript auszuführen. Das R-Skript besteht nur aus etwa 6 Zeilen, verwendet aber das Paket "pracma". Unter Verwendung des Subprozess-Moduls in Python, Es führt das Skript aber mit dem typischen "Fehler in der Bibliothek (Pracma): Es gibt kein Paket namens 'Pracma'". Ich suche nur nach einer einfachen Lösung, um R-Skripte ausführen zu können, auf denen nicht-base-Pakete installiert sind. Ich weiß, dass du das irgendwie mit rpy2 machen kannst, aber ich kann das nicht mit pip installieren, und ich benutze auch Anaconda3.Ausführen eines R-Skripts mit Paketen aus Python Code

Alles in allem, ich möchte nur ein einfaches Paket, das R-Skripte, die Pakete in ihnen installiert haben, laufen. Jede Hilfe würde sehr geschätzt werden.

Dies ist der relevante Teil meines Python-Code:

sp.run('Rscript Hausdorff.R', shell=True) 

bFile = open("HausdorffData/hausdorff.txt", "r") 
result = bFile.read() 
bFile.close() 
hausdorff_dist = float(result) 

return hausdorff_dist 

Das ist mein R-Skript:

library(pracma) 

setwd('HausdorffData') 

PointsA <- as.matrix(read.table("HFileA.txt", header = FALSE)) 
PointsB <- as.matrix(read.table("HFileB.txt", header = FALSE)) 

H = hausdorff_dist(PointsA, PointsB) 
write(H, file = "hausdorff.txt",ncolumns = 1, append = FALSE) 

Dies erzeugt die folgende Fehlermeldung:

Error in library(pracma) : there is no package called 'pracma' 
Execution halted 
+0

Hier nach einem Paket, einer Bibliothek oder einem Plug-in zu fragen, passt nicht. Antworten und Kommentare sollen (hauptsächlich) meinungsbezogen sein. Wenn Sie einen Code zur Verfügung stellen, können wir Ihnen helfen, zusätzliche Zeilen oder Korrekturen zu Ihren Versuchen hinzuzufügen. Bitte versuchen Sie uns Ihren Versuch zu zeigen. Vielen Dank. – Dilettant

+0

Ich bearbeitet, um einige relevante Code von dem, was ich beziehe, hinzuzufügen. Danke @Dilettant – BBollen23

+0

Sieht aus wie 'Rscript' an falschen Stellen aussieht? Haben Sie '.libPaths()' oder Ähnliches versucht? – Dilettant

Antwort

0

Dank @ Dilettant dafür:

Auch wenn R das Skript scheinbar einzeln ausführen kann, müssen wir beim Ausführen des R-Skripts von etwas wie Python sicherstellen, dass das Skript weiß, in welchem ​​Pfad sich unsere Bibliothek befindet. Dies wird erreicht, indem diese Zeile am Anfang der Zeile hinzugefügt wird code:

Wenn der Code andere Zeilen enthält, die das Ändern des Arbeitsverzeichnisses betreffen, sind diese durch Ändern des Bibliothekspfads nicht betroffen.

+0

Dies ist ein spezieller Anwendungsfall. Man muss '.libPaths()' nicht angeben, wenn man R-Skripte von anderen Programmen aufruft. Ich habe viele R-Skripte von Python ausgeführt. Wie rufst du das R-Skript an? Was ist 'sp.run()' was nicht vom Unterprozessmodul. – Parfait

+0

sp.run() ist im Unterprozessmodul. Es wurde in Python 3.5 hinzugefügt. Und vielleicht ist es tatsächlich ein spezieller Fall, aber egal, ob ich es mit sp.call() oder sp.run() anrufe, bekomme ich den gleichen Fehler. Dies könnte der Grund sein, warum ich so viel Mühe hatte, nach tonnenweise Suchen eine Lösung zu finden, als es so einfach war. – BBollen23