【问题标题】:What command converts knitr R Markdown into Stack-Exchange-friendly Markdown?什么命令将 knitr R Markdown 转换为 Stack-Exchange-friendly Markdown?
【发布时间】:2012-06-17 02:56:56
【问题描述】:

动机: 我经常想将使用 R Markdown 进行快速分析的结果粘贴到 StackExchange 站点中。这包括R-tag on Stack OverflowCross Validated,甚至是对Cognitive Sciences Stack Exchange 等网站的特定领域分析(例如,对OECD life index data 的快速分析)。

默认转换的问题: knitrdefault 降价输出不适合包含在 StackExchange 中。 我能看到的主要问题是

  • 图像引用到本地硬盘
  • 代码块没有制表符或空格缩进;而是他们使用 github 风格的 Markdown(即没有缩进)

即,块看起来像这样:

```r
some code
```

输出看起来像这样

```
## some output
## ...
```

可能还有其他具体问题需要考虑,例如

  • 确保正确包含表格
  • 确保为支持 MathJax 的站点(如交叉验证和认知科学堆栈交换)正确传递方程。

问题

将 R Markdown 转换为适合简单包含到 Stack Exchange 站点中的 Markdown(或 HTML)的好命令是什么?

我认为一个理想的命令应该是一个单行命令,它接受一个 R Markdown 文件并生成一个文件,其中整个内容可以直接粘贴到 Stack Exchange 中,以产生一个格式正确的问题或答案。

我将this simple rmd file 与几个代码块、一个图形和一个方程式作为测试示例分享。

初步想法: 在 imgur 上托管图像可能会解决图像问题。这可以通过在 R Markdown 文件中包含以下内容来完成,但如果将此指令合并到某个单行命令中可能会更简单。

``` {r }
opts_knit$set(upload.fun = imgur_upload) 
````

可能值得考虑 HTML 或 Markdown 是否是粘贴到 StackExchange 的更好格式。 markdown 包提供了很大的灵活性。

【问题讨论】:

  • 哇,在这里接近堆栈交换大学。 arXiv 有这种支持吗?

标签: r knitr


【解决方案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))
}

更新:我在您的测试文件上测试了此功能,它在启用mathjax 的 stats.stackexchange.com 上呈现良好。

【讨论】:

  • 谢谢。这工作得很好。我认为可以改进的一件事是输入和输出之间的空间量。使用上述函数,R 命令和 R 输出之间有 3 个空行,它们都呈现为一个大代码块。对于堆栈交换来说,这是太多的空白。我认为理想情况下,stackexchange 上的输出看起来与默认情况下类似(即,白框用于输入,灰框用于输出)。至少我认为输入和输出之间有一个空行就足够了。
  • 好点。我不确定为什么会出现额外的换行符。您可能希望将此作为问题发布到 knitr 邮件列表或 github。
  • 我不确定这是否是 knitr 的问题。这可能与 StackExchange 如何呈现降价有关。空行不缩进制表符。所以我想理论上代码块不应该合并在一起,但它们在 StackExchange 中会合并。
  • 额外的换行符是为了确保块被很好地分开,因为额外的换行符不会在降价中受到伤害。
  • 有道理。但是当你使用results = "asis" 时会产生问题,因为额外的换行符也会随之打印出来。
【解决方案2】:

虽然我仍然想阅读其他建议,但我还是以@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 文件。
  • 需要安装knitrmarkdown 包。
  • 我认为因为我们使用的是“Rscript”,所以需要加载 methods 包。
  • 它将图像上传到 imgur
  • markdownToHTML 仅将代码片段导出为 html 文件。然后可以将此文件的内容复制到 Stack Exchange 答案中。

结果看起来很不错。它克服了过多的空白行的问题。但是,输出不是markdown,这使得结果更难编辑。

【讨论】:

    【解决方案3】:

    RStudio 使用 pandoc,因此您可以指定适合您需要的降价变体。在 .Rmd 文件的开头:

    ---
    output:
      md_document:
        variant: markdown_strict+autolink_bare_uris
    ---
    

    然后您应该能够将生成的文件内容复制/粘贴到 StackExchange 中。

    见:http://rmarkdown.rstudio.com/markdown_document_format.html#markdown-variants

    【讨论】:

      猜你喜欢
      • 2021-12-15
      • 2017-05-11
      • 1970-01-01
      • 2012-06-17
      • 2018-07-27
      • 2019-04-14
      • 1970-01-01
      • 2015-09-06
      • 1970-01-01
      相关资源
      最近更新 更多