21 Stimmen

R - Erfassen von Elementen der R-Ausgabe in Textdateien

Ich versuche, eine Analyse durchzuführen, indem ich R über die Befehlszeile wie folgt aufrufe:

R --no-save < SampleProgram.R > SampleProgram.opt

Betrachten Sie zum Beispiel das folgende einfache R-Programm:

mydata = read.csv("test.txt", header=T)
attach(mydata)
summary(Variable1)
q()

Die Ausgabe wird in SampleProgram.opt angezeigt (nur teilweise dargestellt):

> mydata = read.csv("test.txt", header=T)
> attach(mydata)
> summary(Variable1)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.
   1.00    1.00    2.00    2.47    3.00    4.00
> q()

Dieses einfache R-Programm wird von einem Skript ausgeführt, das die für Variable1 angezeigte zusammenfassende Statistik verwenden muss.

Die Frage ist folgende: Gibt es in R eine Möglichkeit, die Ausgabe von summary(Variable1) zu erfassen und die Ergebnisse in eine Ausgabedatei zu schreiben? Mit anderen Worten: Ich brauche R, um die zusammenfassende Statistik für Variable1 auszuführen, die Werte "Min", "Median" und "Max" zu erfassen und diese allein in eine Ausgabetextdatei zu schreiben. In diesem Beispiel sollte die Ausgabedatei nur eine Zeile mit den Werten "1.00, 2.00, 4.00" (d. h. die Werte "Min", "Median" und "Max") enthalten.

Im obigen Beispiel geht es um die Funktion Zusammenfassung. Ich muss das aber auch mit anderen Befehlen machen (z. B. mit glm)

Ich bin ziemlich neu in R und fragte mich, ob es eine Möglichkeit in R gibt, dies zu tun?

Vielen Dank für die Hilfe.

43voto

Ian Fellows Punkte 16938

Eine einfache Möglichkeit besteht darin, die Ausgabe, die Sie in eine Datei drucken möchten, mit capture.output in einen Textstring zu konvertieren und dann einfach in die Datei zu katalogisieren.

dat<-data.frame(a=rnorm(100),b=rnorm(100),c=rnorm(100))
mod<-lm(a~b+c,data=dat)
out<-capture.output(summary(mod))
cat(out,file="out.txt",sep="\n",append=TRUE)
out<-capture.output(vcov(mod))
cat(out,file="out.txt",sep="\n",append=TRUE)

Dies erzeugt eine Datei out.txt, die Folgendes enthält

Call:
lm(formula = a ~ b + c, data = dat)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.67116 -0.81736 -0.07006  0.76551  2.91055 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)
(Intercept)  0.01196    0.11724   0.102    0.919
b            0.11931    0.12601   0.947    0.346
c           -0.09085    0.13267  -0.685    0.495

Residual standard error: 1.171 on 97 degrees of freedom
Multiple R-squared: 0.0183, Adjusted R-squared: -0.001944 
F-statistic: 0.9039 on 2 and 97 DF,  p-value: 0.4084 

              (Intercept)             b             c
(Intercept)  0.0137444761 -0.0006929722 -0.0005721338
b           -0.0006929722  0.0158784141  0.0042188705
c           -0.0005721338  0.0042188705  0.0176018744

10voto

Dirk Eddelbuettel Punkte 345316

Es gibt viele Möglichkeiten:

  • verwenden. sink()
  • eine Datei öffnen über file() und schreiben Sie die Ergebnisse dorthin
  • Ihren Code in einer Datei ablegen und ihn über R CMD BATCH file.R die eine Ausgabe erzeugt
  • explizit Ergebnisdaten schreiben über write.table() oder seine Varianten wie write.csv()

Dies ist ziemlich elementar, so dass Sie wahrscheinlich von der Lektüre des Handbuchs "Einführung in R" oder eines der zahlreichen Bücher über R profitieren werden.

Die einfachste Lösung könnte sein

R> X <- rnorm(100)
R> summary(X)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
 -2.480  -0.618  -0.223  -0.064   0.609   2.440 
R> write.table(matrix(summary(X)[c(1,3,6)], nrow=1), \
               file="/tmp/foo.txt", col.names=FALSE, row.names=FALSE)
R> system("cat /tmp/foo.txt")
-2.48 -0.223 2.44
R> 

wobei ich die Teilmenge von summary() eine einzeilige Matrix zu sein.

7voto

Spacedman Punkte 89413

Wichtig ist hier, dass Sie lernen, dass die Zusammenfassungsfunktion, wie in:

summary(Variable1)

druckt die Zusammenfassung nicht aus. Er berechnet die Zusammenfassung und gibt sie dann zurück. Der Befehlszeilenprozessor druckt sie aus, kurz bevor die nächste '>'-Eingabeaufforderung erscheint.

Viele R-Funktionen funktionieren auf diese Weise. Daher können Sie fast immer Rückgabewerte durch Zuweisung erhalten. Wenn Sie das also tun:

x = summary(Variable1)

dann wird sie nicht gedruckt. Geben Sie dann aber 'x' ein und es wird gedruckt. In der Befehlszeile wird das letzte ausgewertete Element gedruckt.

Sobald Sie 'x' haben, können Sie die Import/Export-Methoden verwenden, um für später zu speichern.

4voto

rcs Punkte 64558

Sie können auch einen Blick auf die R Daten Import/Export Handbuch (Abschnitt 1.2 Export in Textdateien ).

4voto

csgillespie Punkte 56872

Sie können auch auf einzelne Attribute der summary Befehl. Zum Beispiel

> x=summary(seq(1:10))
> attributes(x)
> attributes(x)
$names
[1] "Min."    "1st Qu." "Median"  "Mean"    "3rd Qu." "Max."   

$class
[1] "table"

> x["1st Qu."]
1st Qu. 
3.25

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