рекомендации

среда, 18 марта 2020 г.

R2DOCX: создание документов word в R

Имеется два способа создания документа word в R. Либо с помощью Knitr и pandoc, либо с помощью R2DOCX.

Pandoc: конвертирование документов Markdown в другие форматы.

Кликните здесь, для получения дополнительной информации.

Функция pandoc() включена в пакет knitr (версия 1.2) и может использоваться для преобразования документов Markdown в другие форматы, такие как Latex/PDF, HTML и Word (. Doc,. Docx).

Чтобы установить pandoc, кликните здесь.

Как использовать pandoc():

Код R:

library(knitr)
pandoc('foo.md', format='html')  # HTML
pandoc('foo.md', format='latex') # LaTeX/PDF
pandoc('foo.md', format='docx')  # MS Word
pandoc('foo.md', format='odt')   # OpenDocument

Создание документа Word с помощью R2DOCX

Используя пакет R2DOCX, вы можете легко создать документ Word из шаблона и добавить график или таблицу в документ.

Полная документация доступна здесь.
Пример показан здесь.

Установка (для версий R >= 3.0)

Код R :

install.packages("devtools")
devtools::install_github('R2DOC', 'davidgohel')
devtools::install_github('R2DOCX', 'davidgohel')

Для пользователей Mac:

Sys.setenv(NOAWT=1) #prevents usage of awt.[http://cran.r-project.org/doc/manuals/r-devel/R-admin.html#Java-_0028OS-X_0029]
install.packages("devtools")
devtools::install_github('R2DOC', 'davidgohel')
devtools::install_github('R2DOCX', 'davidgohel')

Доступные функции:

addPlot для добавления графиков.
addParagraph для добавления абзацев текста.
addTable для добавления таблиц.
addHeader для добавления заголовков.
addTOC для добавления оглавления.
addPageBreak для добавления разрывов страниц.
addLineBreak для добавления разрывов строк.
replaceText для замены текста.

Ваш первый документ:

Sys.setenv(NOAWT=1) #предотвращает использование awt - требуется на Mac
library(R2DOCX)
 
# Создаваемый файл
docx.file <- span=""> "document.docx"
# Объект Docx для работы
doc = new ("Docx", title = "My example" )
#Добавление таблицы
doc = addTable( doc, iris[1:10,] )
# Добавление текста
doc = addParagraph( doc, value = "Hello World!", stylename = "Normal" )
# Добавление графика
doc = addPlot( doc, function() plot( rnorm(10), rnorm(10) )
               , width = 10, height = 8
)
# Запись файла
writeDoc( doc, docx.file )

Создание документа Word из шаблона

# Создаваемый документ
docx.file = "document.docx"
# Документ Word, используемый в качестве шаблона
template.file = file.path( find.package("R2DOCX"), "templates/TEMPLATE_01.docx", fsep = "/" )
# Создание объекта
doc = new("Docx"
, title = "My example" 
, basefile = template.file
)
# 2 ключевых слова в документе - заменим их
doc = replaceText( doc, pattern = "AUTHOR", replacement = "John Doe" )
doc = replaceText( doc, pattern = "DATE", replacement = date() )

Главный заголовок

#Главный заголовок
#**************************************
doc = addParagraph( doc, value = "Exemple", stylename = "TitleDoc" )
doc = addPageBreak( doc ) #saut de page



Оглавление

#Таблица содержимого: TOC
#**************************************
#(у пользователя запрашивают обновления TOC при первом открытии документа)
doc = addHeader(doc, "Table des matières", 1);
doc = addTOC(doc)
doc = addPageBreak( doc )#saut de page



Добавление текста (обычного и списка)

# Добавление текста (обычного и списка)
#**************************************
doc = addHeader(doc, "Dataset presentation", 1);
#Обычный текст
doc = addParagraph( doc, value = "Dataset 'measured.weights' is set of weights measurements collected on few people before savate training.", stylename = "Normal" )
#Ненумерованный список
texts = c( "Column 'gender' is the subject gender." 
           , "Column 'id' is the unique subject identifier." 
           , "Column 'cat' is the subject weight category." 
           , "Column 'competitor' tells wether or not subject practice competition." 
           , "Column 'day' is the day of measurement." 
           , "Column 'weight' is the measured weight." 
)
doc = addParagraph( doc, value = texts, stylename = "BulletList" )



Условное форматирование текста

Функция addParagraph используется для простого добавления текста, как показано выше. Ее также можно использовать для замены текста и условного форматирования в документе.

# шаблон текста
x = "[animal] eats [food]."
# определяем свойства форматирования для замены текста – см. раздел "стили"
textProp = textProperties( color = "blue" )
replacement.styles = list( animal= textProp, food= textProp )
# определяем замену текста
replacements = list( animal = "donkey", food = "grass" )
 
doc = addParagraph( doc, value = x, stylename = "Normal"
                     , replacements = replacements
                     , replacement.styles = replacement.styles
)
 



Функция textProperties 

textProperties(color = "black", font.size = 10
, font.weight = "normal", font.style = "normal"
, font.family = "Arial" )

color: font color; font.size: size in pixel; font.weight : "normal" ou "bold"; font.style: "normal" ou "italic"; font.family: font family.

Добавление таблицы

Простая таблица:

# Добавление таблицы
#**************************************
# Используемые данные
data( measured.weights )
doc = addHeader(doc, "Dataset", 1);
doc = addHeader(doc, "Dataset first lines", 2);
#Простая таблица
doc = addTable( doc
                , data = head( measured.weights, n = 10 )
                , formats = get.light.formats()
)
doc = addLineBreak( doc )#Line break



Переименовывание заголовков таблицы:

Перед переименовыванием:

doc = addTable( doc, data = weights.summary)



После переименовывания:

doc = addTable( doc
, data = weights.summary
, header.labels = list("id" = "Subject Identifier", "avg.weight" = "Average Weight"
, "regularity" = "Regularity", "visit.n" = "Number of visits", "last.day" = "Last visit"
) # Названия столбцов
)
 



Простая таблица, настроенная с помощью объединенных строк:

В приведенной ниже таблице объединены строки  в столбце «day». Столбец «gender» окрашен по полу.

# Простая addTable с объединением строк в столбце 'day'
doc = addHeader(doc, "Dataset last lines", 2);
sampledata = tail( measured.weights[ order(measured.weights$day), ], n = 20 )
doc = addTable( doc
, data = sampledata
, span.columns = c("day")
, col.colors = list( "gender" = ifelse( sampledata$gender == "male" , "#00c2ff", "#ffcdd1") )
)



Настраиваемая таблица со сгруппированными заголовками:

В этой таблице заголовки были переименованы, созданы сгруппированные заголовки, указан тип столбцов (%, целое, символ, десятичное число, дата). Значения столбца «Regularity» были раскрашены в соответствии со значением (серый, если <0> = 0,5).

# настраиваемая таблица
doc = addHeader(doc, "Dataset summary", 1);
doc = addTable( doc
, data = weights.summary
, header.labels = list("id" = "Subject Identifier", "avg.weight" = "Average Weight"
, "regularity" = "Regularity", "visit.n" = "Number of visits", "last.day" = "Last visit"
) # заголовки столбцов
, grouped.cols=list( "id" = "id"
, "Summary" = c( "avg.weight",  "regularity", "visit.n", "last.day" ) 
) # строка сгруппированных заголовков, добавляемая перед строкой заголовков
, col.types = list( "id" = "character", "avg.weight" = "double"
, "regularity" = "percent", "visit.n" = "integer"
, "last.day" = "date" ) # типы каждого столбца 
, col.fontcolors = list( "regularity" = ifelse( weights.summary$regularity < 0.5 , "gray", "blue") ) # настраиваемые цвета шрифта для столбца "regularity"
)
 



Добавление графика

# Добавление графика
#**************************************
doc = addPageBreak( doc )
doc = addHeader(doc, "Graphics", 1);
doc = addPlot( doc,
               function() boxplot(measured.weights$weight ~ measured.weights$id,
                                  xlab = "Subjects", ylab = "Weights" , col = "#0088cc",
                                  legend = "My boxplot"),
               width=7, height=7
              )



Замена текста

Чтобы заменить ключевое слово «AUTHOR» в документе на «Pearson»:

doc = replaceText( doc, "AUTHOR", "Pearson")

Стили заголовков, доступные в вашем документе

doc = new("Docx", title = "My example" )
styles( doc )
# [1] "Normal"                  "Titre1"                  "Titre2"                 
# [4] "Titre3"                  "Titre4"                  "Titre5"                 
# [7] "Titre6"                  "Titre7"                  "Titre8"                 
#[10] "Titre9"                  "Policepardfaut"          "TableauNormal"          
# ...
doc = setHeaderStyle(doc, stylenames = c("Titre1", "Titre2", "Titre3", "Titre4", "Titre5", "Titre6", "Titre7", "Titre8", "Titre9" ) ) 
doc = addHeader( doc, "title 1", 1 )

Полный скрипт, использованный для создания этого документа Word, можно скачать здесь: R2DOCX.r


Комментариев нет:

Отправить комментарий