2009-11-14 11 views
21

Próbuję uruchomić analizę powołując R poprzez linię poleceń w następujący sposób:R - przechwytywanie elementy R wyjście do plików tekstowych

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

Na przykład, rozważmy prosty program R poniżej:

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

wyjście jest wyświetlany w SampleProgram.opt (tylko częściowo pokazany)

> 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() 

prosty program R będzie wykonywane przez skrypt, który musi użyć statystyki podsumowania wyświetlanej dla zmiennej Variable1.

Pytanie brzmi następująco: Czy istnieje sposób w R, aby przechwycić dane wyjściowe podsumowania (Variable1) i zapisać wyniki w pliku wyjściowym? Innymi słowy, potrzebuję R, aby uruchomić statystyki podsumowujące dla zmiennej Variable1, przechwycić wartości "Min", "Median" i "Max" i zapisać je w osobnym pliku tekstowym. W tym przykładzie plik wyjściowy powinien zawierać tylko jedną linię o wartościach "1,00, 2,00, 4,00" (tj. Wartości "Min", "Mediana" i "Maks.").

Powyższy przykład mówi o funkcji podsumowania. Ale, muszę to zrobić także z innymi poleceniami (takimi jak glm). Jestem całkiem nowy dla R i zastanawiałem się, czy istnieje sposób w R, że mógłbym to zrobić?

Dzięki za pomoc.

Odpowiedz

4

Można również uzyskać dostęp do poszczególnych atrybutów polecenia summary. Na przykład

> 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 
10

Istnieje wiele sposobów:

  • użytku sink()
  • otworzyć plik poprzez file() i zapisu wyników do niego
  • umieścić kod w pliku i uruchom go poprzez R CMD BATCH file.R który tworzy wyjściowy
  • jawnie zapisuj dane wyników przez write.table() lub jego warianty, takie jak: write.csv()

Jest to dość elementarny więc prawdopodobnie będzie korzystać z czytania „r” Wprowadzenie do instrukcji lub jednej z licznych książek na temat R.

Najprostszym rozwiązaniem może być

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> 

gdzie wymusić podzbiór summary() jest macierzą z jednego wiersza.

+7

'write (podsumowanie (X) [c (1,3,6)], file =" test.txt ")' jest prostsze;) – rcs

+0

Dobrze, dziękuję :) –

+0

Doh, i Ian przypomina nam obojgu o cat (..., file = ...) –

39

Prostym sposobem jest przekonwertowanie pliku wyjściowego, który ma zostać wydrukowany, i przekonwertowanie go na ciąg tekstowy za pomocą metody capture.output. wtedy możesz po prostu przekodować wyjście do pliku.

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) 

spowoduje to utworzenie pliku.txt zawierający

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 
7

Ważną rzeczą jest to, aby dowiedzieć się, że funkcja podsumowanie, jak w:

summary(Variable1) 

nie drukuje podsumowanie. Opracowuje podsumowanie, a następnie zwraca je. Procesor linii poleceń wykonuje wydruk tuż przed pojawieniem się następnego monitu ">".

Wiele funkcji R działa w ten sposób. Dlatego prawie zawsze można uzyskać wartości zwracane przez przypisanie. Jeśli więc to zrobisz:

x = summary(Variable1) 

to nie zostanie wydrukowane. Ale następnie wpisz "x" i będzie. Linia poleceń drukuje ostatnią wycenioną rzecz.

Gdy masz "x", możesz użyć metod importu/eksportu, aby zapisać na później.

1

nie trzeba wyeksportować do pliku, wystarczy użyć podsumowanie (x) [1] na min, podsumowanie (x) [2] dla pierwszej wartości ćwierć.

Powiązane problemy