tutorial - ¿Qué comando convierte el Knitr R Markdown en un Markdown amigable con Stack-Exchange?
r knitr cache (3)
Motivación : a menudo quiero pegar los resultados de un análisis rápido utilizando R Markdown en un sitio de StackExchange. Esto incluye el R-tag en Stack Overflow , Cross Validated , o incluso un análisis específico de dominio en sitios como Cognitive Sciences Stack Exchange (por ejemplo, este rápido análisis de datos de índice de vida de la OCDE ).
Problemas con la conversión predeterminada: la salida de knitr
de knitr
predeterminada de knitr
no es adecuada para su inclusión en StackExchange. Los principales problemas que puedo ver son que
- Las imágenes están referenciadas en el disco duro local.
- los trozos de código no son tabulaciones o espacios con sangría; más bien usan el estilo de github Markdown (es decir, sin sangría)
Es decir, los trozos se ven así:
```r
some code
```
y la salida se ve así
```
## some output
## ...
```
También puede haber otros temas específicos a considerar, como
- Asegurando que las mesas estén incluidas correctamente
- asegurándose de que las ecuaciones se pasen correctamente para los sitios que admiten MathJax como Cross Validated y Cognitive Science Stack Exchange.
Pregunta
¿Cuál es un buen comando para convertir R Markdown en Markdown (o HTML) adecuado para una simple inclusión en los sitios de Stack Exchange?
Creo que un comando ideal sería el de una sola línea que toma un archivo Markdown R y genera un archivo donde todo el contenido se puede pegar directamente en Stack Exchange para obtener una pregunta o respuesta bien formateada.
Comparto este simple archivo rmd con un par de fragmentos de código, una figura y una ecuación como ejemplo de prueba.
Pensamientos iniciales : el alojamiento de imágenes en imgur presumiblemente solucionaría el problema con las imágenes. Esto se puede hacer incluyendo lo siguiente en el archivo Markdown R, pero probablemente sería más sencillo si esta instrucción se incorporara en algún comando de una sola línea.
``` {r }
opts_knit$set(upload.fun = imgur_upload)
````
Podría valer la pena considerar si HTML o Markdown es el mejor formato para pegar en StackExchange. El paquete de markdown
proporciona mucha flexibilidad.
Aquí hay una función de utilidad que debería comenzar. Establece las cargas automáticas a imgur, así como el procesamiento de reducción del código fuente mediante pestañas en lugar de bloques cercados. Puede mejorar esta función para agregar otras opciones que serían útiles.
stackify <- function(rmd_file, ...){
require(knitr)
opts_knit$set(upload.fun = imgur_upload)
render_markdown(strict = TRUE)
out <- knit(rmd_file, ...)
return(invisible(out))
}
ACTUALIZACIÓN: probé esta función en el archivo de prueba y se muestra bien en stats.stackexchange.com, que está habilitado para mathjax
.
Aunque todavía me gustaría leer otras sugerencias, pirateé este script utilizando la respuesta de @Ramnath como punto de partida. Produce un fragmento HTML en lugar de 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") ''
- Se supone que hay un solo archivo
rmd
en el directorio de trabajo. Me imagino que seleccionar el archivo rmd podría hacerse de una manera más sofisticada. - Requiere que los paquetes
knitr
ymarkdown
estén instalados. - Creo que porque estamos usando ''Rscript'' el paquete de
methods
necesita ser cargado. - Sube imagenes a imgur.
- markdownToHTML exporta solo el fragmento de código como un archivo html. El contenido de este archivo se puede copiar en la respuesta de Stack Exchange.
El resultado se ve bastante bien. Supera el problema de las líneas en blanco excesivas. Sin embargo, la salida no es reducida, lo que dificulta la edición del resultado.
RStudio utiliza pandoc para que pueda especificar la variante de reducción adecuada para sus necesidades. Al inicio del archivo .Rmd:
---
output:
md_document:
variant: markdown_strict+autolink_bare_uris
---
Entonces debería poder copiar / pegar el contenido del archivo resultante en StackExchange.
Consulte: http://rmarkdown.rstudio.com/markdown_document_format.html#markdown-variants