Подтвердить что ты не робот

R - захват элементов вывода R в текстовые файлы

Я пытаюсь выполнить анализ, вызвав R через командную строку следующим образом:

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

Например, рассмотрим простую программу R ниже:

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

Выход отображается в SampleProgram.opt(только частично показано):

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

Эта простая программа R будет выполнена с помощью script, которая должна использовать итоговую статистику, отображаемую для Variable1.

Вопрос в следующем: есть ли какой-либо способ в R, чтобы захватить вывод резюме (Variable1) и записать результаты в выходной файл? Другими словами, мне нужно, чтобы R запускала сводную статистику для Variable1, фиксировала значения "Min", "Median" и "Max" и записывала их только в выходной текстовый файл. В этом примере выходной файл должен содержать только одну строку со значениями "1.00, 2.00, 4.00" (т.е. Значения "Мин", "Медиана" и "Макс" ).

В приведенном выше примере рассказывается о сводной функции. Но мне нужно сделать это и с другими командами (например, glm)

Я новичок в R и задавался вопросом, есть ли способ в R, чтобы я мог это сделать?

Спасибо за помощь.

4b9b3361

Ответ 1

Вы также можете получить доступ к отдельным атрибутам команды summary. Например

> 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

Ответ 2

Простым способом является преобразование вывода, который вы хотите распечатать в файл, и преобразование его в текстовую строку с помощью capture.output. то вы можете просто вывести вывод в файл.

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)

создает файл out.txt, содержащий

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

Ответ 3

Существует много способов:

  • использовать sink()
  • откройте файл через file() и напишите ему результаты
  • поместите свой код в файл и запустите его через R CMD BATCH file.R, который создает выходные данные
  • явно записывать данные результатов через write.table() или его варианты, такие как write.csv()

Это довольно элементарно, поэтому вам, вероятно, удастся прочитать руководство "Введение в R" или одну из многочисленных книг на R.

Простейшим решением может быть

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> 

где я заставляю подмножество summary() быть матрицей одной строки.

Ответ 4

Важно здесь узнать, что сводная функция, как в:

summary(Variable1)

не выводит сводку. Он выдает сводку и затем возвращает ее. Процессор командной строки выполняет печать, перед тем как вывести следующую подсказку " > ".

Много R-функций работают так. Следовательно, вы всегда можете получить возвращаемые значения по заданию. Итак, если вы это сделаете:

x = summary(Variable1)

тогда он не будет напечатан. Но тогда введите "x", и он будет. Командная строка печатает последнее оцениваемое значение.

После того, как вы получили "x", вы можете использовать методы импорта/экспорта для сохранения позже.

Ответ 6

вам не нужно экспортировать в файл, просто используйте summary (x) [1] для min, summary (x) [2] для значения первого квартала.