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, чтобы я мог это сделать?
Спасибо за помощь.
Ответы
Ответ 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", вы можете использовать методы импорта/экспорта для сохранения позже.
Ответ 5
Вы также можете посмотреть R Data Import/Export manual (раздел 1.2 Экспорт в текстовые файлы).
Ответ 6
вам не нужно экспортировать в файл, просто используйте summary (x) [1] для min, summary (x) [2] для значения первого квартала.