2 Stimmen

Wie kann ich mein .RProfile mit dem R-Bundle von Textmate laden?

Diese Frage richtet sich an diejenigen unter Ihnen, die R auf einem Mac in Kombination mit dem Texteditor [Textmate] (http://macromates.com/) von Macromate und dem "R"-Paket verwenden. All das ist natürlich sehr nützlich, aber das ist jetzt nicht der Punkt :-)

Ich habe eine .RProfile-Datei in meinem Standard-Startverzeichnis "~", und sie enthält eine Reihe nützlicher Funktionen, auf die ich beim Schreiben von R-Skripten gerne zugreife. Aber ich benutze auch Textmate für die meisten meiner Schreibarbeiten und die cmd-R-Funktionalität, um meine Skripte in Textmate auszuführen.

Im Moment weiß ich nicht, wie ich Textmate mitteilen kann, wo sich mein .Rprofile befindet.

Gibt es eine Möglichkeit - höchstwahrscheinlich über die Bundle-Einstellungen von Textmate -, dass ich Textmate auf mein .RProfile verweisen kann, damit ich meine Funktionen nicht in jedes Skript pro Skript schreiben muss?

または

Ist es wirklich besser, benutzerdefinierte Funktionen in jedes Skript, das ich schreibe, einzubinden, so dass jeder mit einer grundlegenden R-Einrichtung meine Skripte erstellen und ausführen kann?

Ich habe das Gefühl, dass ich hier entweder in Textmate oder in der R-Umgebung, die es zur Ausführung meiner Skripte aufruft, eine ganz einfache Einstellung oder Konfigurationsdatei übersehen habe.

Vielen Dank im Voraus!

3voto

doug Punkte 67204

Der R-Bundle-Entwickler arbeitet offenbar daran (siehe dies Beitrag auf der Mailingliste), aber sie ist derzeit nicht verfügbar.

In der Zwischenzeit haben Sie mehrere Möglichkeiten.

Zunächst können Sie ein neues Bundle erstellen (z. B. "briandk-R") und dann ein Snippet in diesem Bundle erstellen, entweder mit "source($1)" oder indem Sie die Datei, die Sie als Quelle verwenden möchten, anstelle des Platzhalters eingeben (also z. B. "source("~/some_file_to_source.R"). Wenn Sie Letzteres tun, können Sie TM so konfigurieren, dass er Ihre Datei über einen Tabulator-Trigger ausgibt (wechseln Sie im Bundle-Editor zu "Einstellungen" (obere linke Ecke) und geben Sie "source.r, source.rd.console" in das Feld "Scope Selector" ein und wählen Sie dann einige Buchstaben für Ihren Tabulator-Trigger (z. B. "src.").

Wenn Sie das nicht tun wollen, wechseln Sie in das 'Rdaemon'-Verzeichnis (das sich entweder in Ihrem Home-Verzeichnis oder in ~/Library/Application Support/Rdaemon befindet). In diesem Verzeichnis finden Sie ein weiteres Verzeichnis namens "daemon". Darin befindet sich eine Datei namens "start.r", die die Dateien auflistet, die beim Start von R vom Rdaemon bezogen werden. Von dort aus wissen Sie, was zu tun ist. (Hinweis: Dieses Verzeichnis enthält auch einige andere Skripte, die Anfangseinstellungen enthalten; vielleicht möchten Sie sich diese ebenfalls ansehen)

2voto

William Doane Punkte 1386

Der erste Teil von Dougs Antwort bietet die einfachste Sofortlösung... hinzufügen

source('/Users/briandk/.Rprofile')

in den Kopf jeder .r-Datei einfügen, in der Sie diese Funktionen haben möchten... mit dieser einen Codezeile erhalten Sie Ihre Hilfsfunktionen. Das hilft natürlich nur, wenn Sie die gesamte TM-Datei ausführen.

Im Idealfall wird das Bundle aktualisiert... vielleicht um eine Shell-Variable über die TM-Einstellungen zu unterstützen?

TM_RPROFILE 

die auf den Pfad zu Ihrer .Rprofile-Datei gesetzt werden kann.

Ich habe dies gerade in tmR.rb mit nur 2 Zeilen Code gehackt. Um dies zu implementieren, gehen Sie zu ~/Library/Application Support/TextMate/Pristine Copy/Bundles/ und zeigen Sie den Inhalt von R.tmbundle

Darin finden Sie support/tmR.rb

in meiner Version sollten Sie in der Nähe von Zeile 112 Folgendes ändern

tmpDir = File.join(ENV['TMP'] || "/tmp", "TM_R")
recursive_delete(tmpDir) if File.exists?(tmpDir) # remove the temp dir if it's already there
Dir::mkdir(tmpDir)

# Mechanism for dynamic reading
# stdin, stdout, stderr = popen3("R", "--vanilla", "--no-readline", "--slave", "--encoding=UTF-8")
stdin, stdout, stderr, pid = my_popen3("R --vanilla --slave --encoding=UTF-8 2>&1")
# init the R slave
stdin.puts(%{options(device="pdf")})
stdin.puts(%{options(repos="#{cran}")})

a

tmpDir = File.join(ENV['TMP'] || "/tmp", "TM_R")
recursive_delete(tmpDir) if File.exists?(tmpDir) # remove the temp dir if it's already there
Dir::mkdir(tmpDir)

rprofile = (ENV['TM_RPROFILE'] == nil) ? "" : "source('" + ENV['TM_RPROFILE'] + "')"

# Mechanism for dynamic reading
# stdin, stdout, stderr = popen3("R", "--vanilla", "--no-readline", "--slave", "--encoding=UTF-8")
stdin, stdout, stderr, pid = my_popen3("R --vanilla --slave --encoding=UTF-8 2>&1")
# init the R slave
stdin.puts("#{rprofile}")
stdin.puts(%{options(device="pdf")})
stdin.puts(%{options(repos="#{cran}")})

Fügen Sie dort einfach 2 Zeilen ein... die, die mit "rprofile =" beginnt und die, die "#{rprofile}" enthält.

-Wil

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X