R-Skript über exec() aufrufen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • R-Skript über exec() aufrufen

    Ich habe folgendes Problem:
    Ich würde gerne von PHP aus ein R Skript aufrufen. Dieses erstellten dann einen Graph, und den wiederum will ich später dem Benutzer anzeigen. Soweit, so gut.
    Wenn ich das entsprechende R-Skript über die Shell mit "R --file=script.r" aufrufe, klappt alles wunderbar. Wenn ich genau den gleichen Befehl in PHP über "exec('R --file=script.r')" aufrufe, klappt es leider nur fast. Anscheinend wird das Script aufgerufen, und sogar ein Ausgabebild erstellt, dieses ist nur leider genau 0 Byte groß.
    Jetzt weiß ich leider weder, was schief läuft, noch, wie ich das debuggen kann, denn in PHP gibt es keine Fehlermeldungen, was ja auch logisch ist, denn offensichtlich wird das Script ja aufgerufen, es verhält sich nur anders, als wenn ich den Befehl direkt über die Shell eingebe.
    Spitze wäre es natürlich, wenn mir jemand direkt das Problem lösen kann, aber ich wäre auch schon sehr zufrieden, wenn mir einer sagt, wie ich sehen kann was auf der Shell bzw. im R-Interpreter nach dem Aufruf abläuft.

    Also, wie gesagt der entscheidene PHP-Code ist:


    PHP-Code:
    exec('R --file=script.r'); 
    vielleicht hier noch das R-Script (man weiß ja nie, obwohl es wie gesagt, funktioniert wenn ich es direkt von der Shell aus aufrufe):

    PHP-Code:
    t<-read.table("/opt/lampp/htdocs/TAVAC/tralala.txt",sep="\t")
    m<-as.matrix(t)
    m<-m[-1:0,-3:0]
    mode(m)<-'numeric'
    require(sma)
    col.names=t[1,-3:0]
    col.names.format=c()
    for (
    z in c(1:(dim(col.names)[2])))
    {
        
    l=col.names[z]
        
    l=as.character(l[,1])
        
    col.names.format=c(col.names.format,l)
    }
    jpeg(filename "out0.jpeg",width 800height 800)
    plot.mat(m,rlabels=t[-1:0,1],clabels=col.names.format)
    dev.off() 
    Zuletzt geändert von Mondmotte; 06.11.2008, 22:49.

  • #2
    WTF ist R?

    Die Ausgabe des R-Interpreters kannst du dir in PHP ausgeben lassen. Auf der Manual-Seite zu exec() gibt es in den User Contributed Notes alle Variationen.

    Kommentar


    • #3
      GNU R ist ein Sprache, die besonders gut für statistische Berechnungen geeignet ist. Vor allem kann sie prima alle Arten von Graphen erstellen. Aber zurück zum Thema

      Vielen Dank, ich bin schon ganz gespannt, was da morgen beim Debuggen so ans Tageslicht kommt. Kann es mir bisher echt nicht erklären...

      Kommentar


      • #4
        Das Manual zu exec sagt:
        Code:
        string exec( string $befehl [color=red][, array $ausgabe [, int $return_var]][/color] )

        Kommentar


        • #5
          Ich hab's jetzt mal versucht, wirklich verstehen tu ich die Sache aber leider immer noch nicht. Die Ausgabe der Shell ist angeblich:

          R version 2.6.2 (2008-02-08)
          [..]
          > t<-read.table("/opt/lampp/htdocs/TAVAC/tralala.txt",sep="\t")
          [..]
          > jpeg(filename = "out0.jpeg",width = 800, height = 800)
          No protocol specified
          Fehler in X11(paste("jpeg::", quality, ":", filename, sep = ""), width, :
          kann Device JPEG nicht starten
          Calls: jpeg
          Zusätzlich: Warning message:
          In jpeg(filename = "out0.jpeg", width = 800, height = 800) :
          konnte Verbindung zu X11 display '' nicht öffnen
          Ausführung angehalten

          Also, im Klartext: Der Interpreter wird aufgerufen, das Script wird aufgerufen, die Befehle bis zu jpeg() (also derjenige, der die Ausgabedatei öffnet) laufen durch, und dann bricht der Interpreter mit einer - für mich - absolut kryptischen Fehlermeldung ab. Aber gut, da werd ich wohl mal in einem R-Forum nachfragen müssen. Danke euch beiden.

          Kommentar


          • #6
            Jep, das ist ein R-Problem ^^ Vielleicht irgendwelche Konfigurationswerte oder so mitgeben? So rein ins Blaue geraten.

            Kommentar


            • #7
              Wir arbeiten noch dran. Das wirklich merkwürdige an der Sache ist halt, daß wenn man den Befehl selbst in die Shell eingibt klappt's, wenn man PHP das machen läßt, kommt es zu obigem Problem.
              Standardmäßig gibt R sämtlich Graphen direkt am Bildschirm aus, ich vermute, durch den jpg()-Befehl wird dieses Ausgabe lediglich umgeleitet, also nicht unmittelbar als JPEG angelegt, so daß vielleicht trotzdem für das Erstellen auf die Grafikkarte zugegriffen werden muß, was PHP vielleicht nicht erlaubt ist...oder so. Ist alles noch ziemlich unklar.
              Klar ist bisher nur, daß auch alle anderen Möglichkeiten, die Grafiken zu speichern, wie png() oder pdf() scheitern, ansonsten aber R wunderbar zu funktionieren scheint.

              Kommentar


              • #8
                Hallo nochmal
                Falls es jemanden interssiert:
                Das eigentliche Problem konnte ich nicht lösen, aber ich hab einen sehr hilfreichen Hinweis bekommen; es gibt da zwei Projekte, mit denen diese und andere Schwierigkeiten umschifft werden können:
                Rserve und
                RPHP
                Tief versteckt in der Dokumentation zu Letzterem findet sich auch noch der Satz: "Moreover, under UNIX the R's png device uses the X11 driver, which is a problem in ``batch mode'' or for remote operation" Ich denke, das könnte der Grund sein, warum das bei mir nicht geklappt hat ;-)

                Kommentar

                Lädt...
                X