Подтвердить что ты не робот

Какая команда преобразует 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 обеспечивает большую гибкость.

4b9b3361

Ответ 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