Как преобразовать R Markdown в HTML? То есть, что Knit HTML делает в Rstudio 0.96?

Какие команды запускаются при нажатии кнопки "Knit HTML" для файла R Markdown в Rstudio 0.96?

Моя мотивация состоит в том, что я могу захотеть запустить ту же команду, когда я нахожусь в другой среде редактирования текста, или я могу захотеть объединить команду в более крупном makefile.


person Jeromy Anglim    schedule 18.05.2012    source источник
comment
На самом деле я не знаю наверняка, но подозреваю, что это комбинация использования knit для преобразования из R Markdown в Markdown, а затем, возможно, использования чего-то вроде pandoc для преобразования в html. Или, может быть, RStudio выполняет преобразование в HTML. Но pandoc довольно прост в использовании и может быть легко добавлен в make-файл.   -  person Dason    schedule 18.05.2012
comment
Я немного обновил заголовок до Как преобразовать R Markdown в HTML и поместил бит RStudio в конце заголовка, предполагая, что люди с большей вероятностью будут гуглить, как преобразовать R Markdown в html.   -  person Jeromy Anglim    schedule 14.06.2012


Ответы (4)


Поместите Sys.sleep(30) в кусок, и вы четко увидите, какие команды вызываются RStudio. В основном они

  1. library(knitr); knit(), чтобы получить файл уценки;
  2. RStudio имеет внутренние функции для преобразования разметки в HTML;

Второй шаг будет более прозрачным в следующей версии markdown < / a> пакет. В настоящее время вы можете использовать knitr::knit2html('your_file.Rmd') для получения HTML-файла, аналогичного тому, который вам предоставляет RStudio.


Обновление от 2017/09/17: Приведенный выше ответ относится к RStudio v0.96 (в 2012 году). Теперь R Markdown компилируется через rmarkdown::render(), который использует Pandoc вместо устаревшего пакета R markdown. Дополнительную информацию см. В сообщении Взаимосвязь между R Markdown, Knitr, Pandoc и Bookdown.

person Yihui Xie    schedule 18.05.2012
comment
У меня есть пример, для которого knit2html("Report.Rmd", encoding='ISO8859-1') не создает тот же html, что и кнопка вязания: возникает проблема с кодировкой, когда я использую knit2html. Однако, когда я нажимаю кнопку вязания, я действительно вижу в журнале, что ISO8859-1 - это encoding вариант. Таким образом, разница должна заключаться в преобразовании md в html. Действительно ли на вязанной пуговице используется markdownToHTML? - person Stéphane Laurent; 05.11.2013
comment
Я думаю, что в каноническом ответе здесь следует упомянуть rmarkdown::render(), именно так я попал на эту страницу и решил мой вопрос. - person MichaelChirico; 17.09.2019
comment
@MichaelChirico Вы правы. Этот ответ был написан в 2012 году, когда пакет rmarkdown еще не родился (rmarkdown был тем, что я имел в виду под следующей версией пакета markdown). Пожалуйста, не стесняйтесь редактировать мой ответ. Спасибо! - person Yihui Xie; 17.09.2019
comment
Я понял, как много! Я бы отредактировал его, но я хотел предоставить вам, как лучше всего вписать его в поток ответа / отличить knitr от rmarkdown подхода, поскольку я не очень уверен, что буду справедливо относиться к нему (я только что научился делать это сегодня ведь!) - person MichaelChirico; 17.09.2019

Базовый сценарий

Итак, теперь, когда выпущен пакет R markdown, вот код для воспроизведения функций Knit в Html.

require(knitr) # required for knitting from rmd to md
require(markdown) # required for md to html 
knit('test.rmd', 'test.md') # creates md file
markdownToHTML('test.md', 'test.html') # creates html file
browseURL(paste('file://', file.path(getwd(),'test.html'), sep='')) # open file in browser 

где test.rmd - имя вашего файла уценки R. Обратите внимание, что я не уверен на 100% в строке browseURL (отсюда и мой вопрос об открытии файлов в веб-браузере) .

Параметры markdownToHTML

В markdownToHTML хорошо то, что существует множество вариантов создания HTML (см. ?markdownHTMLOptions). Так, например, если вам нужен только фрагмент кода без всей информации заголовка, вы можете написать:

markdownToHTML('test.md', 'test.html', options='fragment_only')

или если вам не нравится жесткая упаковка (т.е. вставка разрывов строк, когда в источнике уценки есть отдельные ручные разрывы строк), вы можете опустить опцию 'hard_wrap'.

# The default options are 'hard_wrap', 'use_xhtml', 
#      'smartypants', and 'base64_images'.
markdownToHTML('test.md', 'test.html', 
       options=c('use_xhtml', 'base64_images'))

Makefile

Все это также можно добавить в make-файл, возможно, используя Rscript -e (например, что-то вроде этого). Вот базовый пример make-файла, который я собрал, где test указывает, что файл rmd называется test.rmd.

RMDFILE=test

html :
    Rscript -e "require(knitr); require(markdown); knit('$(RMDFILE).rmd', '$(RMDFILE).md'); markdownToHTML('$(RMDFILE).md', '$(RMDFILE).html', options=c('use_xhtml', 'base64_images')); browseURL(paste('file://', file.path(getwd(),'$(RMDFILE).html'), sep=''))"

В make-файле используются мои предпочтительные параметры уценки: т.е. options=c('use_xhtml', 'base64_images')

person Jeromy Anglim    schedule 10.06.2012

Очень простой метод командной строки от в двух словах о вязальщике:

R -e "rmarkdown::render('knitr_example.Rmd')"

Для этого требуется, чтобы rmarkdown был установлен с install.packages(rmarkdown) и чтобы был установлен pandoc (очевидно, он поставляется с Rstudio, см. knitr in a knutshell для получения дополнительной информации).

До сих пор, когда я использовал это, он красиво помещает все графики в файл HTML, а не как изображения в каталог рисунков, и очищает любые промежуточные файлы, если таковые имеются; точно так же, как это делает компиляция в RStudio.

person Harry    schedule 26.06.2015
comment
+1! Комбинируя его с командой bash find, вы можете фактически отобразить всю структуру каталогов файлов Rmd (например, для курса, в котором много презентаций / учебных пособий): find . -name '*Rmd' -exec R -e "rmarkdown::render('{}')" \; > /dev/null. - person Paul Hiemstra; 13.08.2015
comment
Работает ли экранирование внутренних кавычек с помощью обратной косой черты? - person Harry; 02.05.2017

Похоже, вам следует вызвать rmarkdown :: render () вместо knitr :: knit2html (), потому что a.rmd выглядит как документ R Markdown v2.

person Shicheng Guo    schedule 06.07.2016