2015-06-04 6 views
0

Я пытаюсь экспортировать R выходную таблицу в файл слова. Для этого я использую пакет ReporteRs. Я фиксирую вывод и передаю его в абзац. В этом подходе аккуратный вывод искажается и выглядит не так хорошо, как в консоли или при сохранении в текстовом файле. Как передать вывод как в файл слова? Заранее спасибо.Захват вывода в консоли (nice & tidy) и записать его в файл слова

data("cars2") 
    mydoc = docx(title = "Summary") 
    library(gmodels) 
    aal<-capture.output(CrossTable(cars2$Country, cars2$Type, digits=2, chisq=T)) 
    #capture.output(CrossTable(cars2$Country, cars2$Type, digits=2, chisq=T, format="SPSS"), file="tests.txt") 
    mydoc<-addParagraph(mydoc, aal) 
    writeDoc(mydoc, file = "Summary.docx") 
+0

я могу использовать 'capture.output ((cars2 Кросс $ Страна, cars2 $ Тип, цифры = 2, chisq = T, формат = "SPSS"), файл =" tests.doc ")' для сохранения вывода напрямую к файлу слов. Однако, таким образом, я не смогу использовать другие полезные функции из 'ReporteRs'. Я использую шаблон слова и экспортирую графики и другие объекты в файл слова. – JeanVuda

ответ

2

Вы должны использовать моноширинный шрифт (как выход R консоли используется моноширинный шрифт)

library(gmodels) 
data(infert, package = "datasets") 
xx=capture.output(CrossTable(infert$education, infert$induced, expected = TRUE, format="SPSS")) 

Решение 1: использовать существующий стиль (из шаблона), который использует моноширинный шрифт, т.е. rRawOutput в шаблоне по умолчанию

library(ReporteRs) 
mydoc <- docx(title = "Summary") 
mydoc <- addParagraph(mydoc, xx, stylename = "rRawOutput") 
writeDoc(mydoc, file = "Summary.docx") 

Решение 2: использование pot функции для создания фрагмента текста с указанным моноширинного шрифтом

library(ReporteRs)  
mydoc <- docx(title = "Summary") 
mypot <- pot(paste(xx, collapse = "\n"), 
     format = textProperties(font.family = "Courier New", font.size = 9)) 
mydoc <- addParagraph(mydoc, mypot, par.properties = parLeft()) 
writeDoc(mydoc, file = "Summary.docx") 

Решение 3: это один на самом деле не ответить на ваш вопрос, как он не использует gmodels но Мне нравится выход:

library(ReporteRs) 
library(rtable) 
library(broom) 

data(infert, package = "datasets") 
myft = freqtable(table(infert$education, infert$induced)) 
ct = chisq.test(infert$education, infert$induced) 

mydoc = docx(title = "Summary") 
mydoc = addTitle(mydoc, "Table", level = 2) 
mydoc = addFlexTable(mydoc, myft) 
mydoc = addTitle(mydoc, "Chi-squared Test", level = 2) 
mydoc = addFlexTable(mydoc, vanilla.table(tidy(ct))) 
writeDoc(mydoc, file = "Summary.docx") 
+0

Большое вам спасибо за ваш очень хорошо продуманный ответ. Ваш пакет 'ReporteRs' скалы! Продолжайте в таком же духе! – JeanVuda