Какая команда преобразует knitr R Markdown в Stack-Exchange-friendly Markdown?
Мотивация:
Я часто хочу вставить результаты быстрого анализа с помощью R Markdown в сайт StackExchange. Это включает R-тег для, Cross Validated или даже анализ домена на сайтах, таких как Обмен когнитивными науками (например, этот быстрый анализ данных индекса жизни ОЭСР).
Проблемы с преобразованием по умолчанию:
Выделение по умолчанию knitr
не подходит для включения в StackExchange.
Основные проблемы, которые я вижу, это то, что
- изображения относятся к локальному жесткому диску
- фрагменты кода не являются отступом или отступом; скорее, они используют стиль Markdown в стиле github (т.е. нет отступов)
I.e., куски выглядят следующим образом:
```r
some code
```
и вывод выглядит следующим образом
```
## some output
## ...
```
Также могут быть рассмотрены другие конкретные проблемы, такие как
- правильные таблицы включены
- обеспечение правильной передачи уравнений для сайтов, поддерживающих MathJax, таких как Cross Validated and Cognitive Science Stack Exchange.
Вопрос
Что такое хорошая команда для преобразования R Markdown в Markdown (или HTML), подходящего для простого включения в сайты Stack Exchange?
Я думаю, что идеальной командой будет однострочный, который берет файл R Markdown и генерирует файл, в котором весь контент может быть вставлен непосредственно в Stack Exchange, чтобы получить хорошо отформатированный вопрос или ответ.
Я разделяю этот простой файл rmd с несколькими фрагментами кода, фигурой и уравнением в качестве тестового примера.
Начальные мысли:
Хостинг изображений на imgur, по-видимому, разобрал бы проблему с изображениями. Это можно сделать, включив следующее в файл R Markdown, но, вероятно, было бы проще, если бы эта инструкция была включена в некоторую команду с одним слоем.
``` {r }
opts_knit$set(upload.fun = imgur_upload)
````
Возможно, стоит подумать, является ли HTML или Markdown лучшим форматом для вставки в StackExchange. Пакет markdown
обеспечивает большую гибкость.
Ответы
Ответ 1
Вот функция полезности, которая должна вас запустить. Он устанавливает автоматическую загрузку в imgur, а также рендеринг кода исходного кода с использованием вкладок вместо огражденных блоков. Вы можете улучшить эту функцию, чтобы добавить другие параметры, которые были бы полезны.
stackify <- function(rmd_file, ...){
require(knitr)
opts_knit$set(upload.fun = imgur_upload)
render_markdown(strict = TRUE)
out <- knit(rmd_file, ...)
return(invisible(out))
}
UPDATE: я протестировал эту функцию в тестовом файле, и она хорошо отражается на stats.stackexchange.com, который включен mathjax
.
Ответ 2
Хотя мне все же хотелось бы прочитать другие предложения, я взломал этот script с помощью ответа @Ramnath в качестве отправной точки. Он выводит фрагмент HTML, а не Markdown.
Rscript -e 'rmd_file <- dir(pattern="rmd"); md_file <- sub("rmd", "md", rmd_file); html_file <- sub("rmd", "html", rmd_file); require(methods); require(knitr); require(markdown); opts_knit$set(upload.fun = imgur_upload); knit(rmd_file); markdownToHTML(md_file, html_file, options="fragment_only") '
- Предполагается, что в рабочем каталоге есть один файл
rmd
. Я предполагаю, что выбор rmd файла может быть выполнен более сложным способом.
- Для этого требуются пакеты
knitr
и markdown
.
- Я думаю, потому что мы используем "Rscript", пакет
methods
должен быть загружен.
- Он загружает изображения в imgur
- markdownToHTML экспортирует только фрагмент кода в виде html файла. Содержимое этого файла затем можно скопировать в ответ на Stack Exchange.
Результат выглядит неплохо. Он преодолевает проблему чрезмерных пустых строк. Однако вывод не является уценкой, что затрудняет редактирование результата.
Ответ 3
RStudio использует pandoc, поэтому вы можете указать вариант уценки, подходящий для ваших нужд. В начале файла .Rmd:
---
output:
md_document:
variant: markdown_strict+autolink_bare_uris
---
Затем вы можете скопировать/вставить результирующее содержимое файла в StackExchange.
Смотрите: http://rmarkdown.rstudio.com/markdown_document_format.html#markdown-variants