Ich möchte den gesamten Konsolentext in eine Datei umleiten . Folgendes habe ich versucht:
> sink("test.log", type=c("output", "message"))
> a <- "a"
> a
> How come I do not see this in log
Error: unexpected symbol in "How come"
Folgendes habe ich in test.log bekommen:
[1] "a"
Folgendes möchte ich in test.log:
> a <- "a"
> a
[1] "a"
> How come I do not see this in log
Error: unexpected symbol in "How come"
Was mache ich falsch? Vielen Dank!
Antworten:
Sie müssen "Ausgabe" und "Nachricht" getrennt versenken (die
sink
Funktion betrachtet nur das erste Element vontype
).Wenn Sie nun möchten, dass die Eingabe auch protokolliert wird, fügen Sie sie in ein Skript ein:
script.R
1:5 + 1:3 # prints and gives a warning stop("foo") # an error
Und an der Eingabeaufforderung:
con <- file("test.log") sink(con, append=TRUE) sink(con, append=TRUE, type="message") # This will echo all input and not truncate 150+ character lines... source("script.R", echo=TRUE, max.deparse.length=10000) # Restore output to console sink() sink(type="message") # And look at the log... cat(readLines("test.log"), sep="\n")
quelle
1:5 + 1:3
gefolgt von der Ausgabe, dann der nächsten usw. Der Grund, warum ich diese Art von Protokoll erstellen möchte, ist, dass ich ein Programm habe, das mehr als 30 GB RAM benötigt, um ausgeführt zu werden. Ich führe es in der Amazon Cloud aus und speichere die Ausgabe von Regressionen in einzelnen Dateien. Ich möchte in der Lage sein, den Code, der jede Datei erzeugt hat, schnell zu finden, indem ich mir das Protokoll ansehe. Hinweis: Wenn ich nur die Konsolenausgabe ausschneide und einfüge, ist das der Fall.max.deparse.length
Argument. Ich habe die Antwort aktualisiert.Wenn Sie Zugriff auf eine Befehlszeile haben, ziehen Sie es möglicherweise vor, Ihr Skript über die Befehlszeile mit R CMD BATCH auszuführen.
== Inhalt des Skripts beginnen.R ==
a <- "a" a How come I do not see this in log
== Endinhalt von script.R ==
Führen Sie an der Eingabeaufforderung ("$" in vielen un * x-Varianten, "C:>" in Windows) aus
Das nachfolgende "&" ist optional und führt den Befehl im Hintergrund aus. Der Standardname der Protokolldatei hat "out" an die Erweiterung angehängt, dh script.Rout
== Inhalt des Skripts beginnen.Rout ==
R version 3.1.0 (2014-04-10) -- "Spring Dance" Copyright (C) 2014 The R Foundation for Statistical Computing Platform: i686-pc-linux-gnu (32-bit) R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. Natural language support but running in an English locale R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. [Previously saved workspace restored] > a <- "a" > a [1] "a" > How come I do not see this in log Error: unexpected symbol in "How come" Execution halted
== Endinhalt von script.Rout ==
quelle
R CMD BATCH script.R &
funktioniert es nicht.Das kannst du nicht. Sie können höchstens die Ausgabe mit
sink
und die Eingabe mitsavehistory
separat speichern . Oder verwenden Sie externes Tool wiescript
,screen
odertmux
.quelle
Führen Sie R in Emacs mit dem ESS-R-Modus (Emacs Speaks Statistics) aus. Ich habe ein Fenster mit meinem Skript und R-Code geöffnet. Ein anderer hat R laufen. Code wird aus dem Syntaxfenster gesendet und ausgewertet. Befehle, Ausgaben, Fehler und Warnungen werden in der laufenden R-Fenstersitzung angezeigt. Am Ende einer Arbeitsperiode speichere ich die gesamte Ausgabe in einer Datei. Mein eigenes Benennungssystem ist * .R für Skripte und * .Rout für das Speichern von Ausgabedateien. Hier ist ein Screenshot mit einem Beispiel.
quelle
Wenn Sie die Bash-Shell verwenden können, können Sie den R-Code einfach in einem Bash-Skript ausführen und die Streams stdout und stderr an eine Datei weiterleiten. Hier ist ein Beispiel mit einem Heredoc:
Datei:
test.sh
#!/bin/bash # this is a bash script echo "Hello World, this is bash" test1=$(echo "This is a test") echo "Here is some R code:" Rscript --slave --no-save --no-restore - "$test1" <<EOF ## R code cat("\nHello World, this is R\n") args <- commandArgs(TRUE) bash_message<-args[1] cat("\nThis is a message from bash:\n") cat("\n",paste0(bash_message),"\n") EOF # end of script
Wenn Sie dann das Skript mit stderr und stdout ausführen, die an eine Protokolldatei weitergeleitet werden:
Andere Dinge, auf die Sie achten sollten, wären, einfach zu versuchen, stdout und stderr direkt aus dem R heredoc in eine Protokolldatei zu kopieren. Ich habe das noch nicht ausprobiert, aber es wird wahrscheinlich auch funktionieren.
quelle
So speichern Sie Text von der Konsole: Führen Sie die Analyse aus und wählen Sie dann (Windows) "Datei> In Datei speichern".
quelle
Stellen Sie Ihre Rgui-Einstellungen für eine große Anzahl von Zeilen ein, stempeln Sie sie dann und speichern Sie sie in geeigneten Intervallen als Datei.
quelle
Sie können in eine Datei drucken und gleichzeitig den Fortschritt sehen (oder nicht)
screen
, während Sie ein R-Skript ausführen.Wenn Sie den Bildschirm nicht verwenden, verwenden Sie
R CMD BATCH yourscript.R &
und Schritt 4.Wenn Sie den Bildschirm in einem Terminal verwenden, starten Sie den Bildschirm
Führen Sie Ihr R-Skript aus
Gehen Sie zu einem anderen Bildschirm drückt CtrlA, dannc
Schauen Sie sich Ihre Ausgabe mit (Echtzeit) an:
Wechseln zwischen Bildschirmen mit CtrlAdannn
quelle
Wenn Sie Fehlermeldungen in einer Datei speichern möchten
zz <- file("Errors.txt", open="wt") sink(zz, type="message")
Die Ausgabe lautet:
Error in print(errr) : object 'errr' not found Execution halted
Diese Ausgabe wird in einer Datei mit dem Namen Errors.txt gespeichert
Wenn Sie die Werte der Konsole in eine Datei drucken möchten, können Sie das Argument 'split' verwenden:
zz <- file("console.txt", open="wt") sink(zz, split=TRUE) print("cool") print(errr)
Ausgabe wird sein:
[1] "cool"
in der Datei console.txt. Ihre gesamte Konsolenausgabe wird also in einer Datei mit dem Namen console.txt gedruckt
quelle