2012-06-08 24 views

Respuesta

62

La solución general (funciona independientemente de la versión R):

Rscript -e "library(knitr); knit('myfile.Rmd')" 

Desde R 3.1.0, R CMD Sweave ha comenzado a apoyar los documentos no Sweave (aunque el nombre del comando suena un poco extraño), y lo único que debe hacer es especificar un motor de viñetas en su documento, por ej.

%\VignetteEngine{knitr::knitr} 

Para ver los posibles motores de viñeta en knitr, utilice

library(knitr) 
library(tools) 
names(vignetteEngine(package = 'knitr')) 
# "knitr::rmarkdown" "knitr::knitr" "knitr::docco_classic" "knitr::docco_linear" 
+0

Maldita sea ... Iba a publicar eso pero pensé en revisar un poco para ver si había una alternativa menos cursi ... – Dason

+5

tan cursi? En lugar de estar realmente integrado en R, no puedes hacerlo mucho mejor. Mis archivos Makefiles tienen la biblioteca '$ (RSCRIPT) -e" (knitr); knit (\ "$ *. Rnw \") "' –

+2

Brilliant. En este caso particular, todavía estaba usando LaTeX, en lugar de R Markdown, por lo que era la biblioteca 'Rscript -e '(knitr); knit (' myfile.rnw ')" ' –

22

Tengo un script knitme.R:

library(knitr) 
render_html() 
source("hooks.R") # mods to defaults 
inFile = commandArgs(trailingOnly=TRUE)[1] 
outFile = commandArgs(trailingOnly=TRUE)[2] 
knit(inFile,output=outFile) 

así que, pues, haría

Rscript knitme.R $SOURCE $TARGET 

Donde $SOURCE y $TARGET son los requeridos.

También podría integrar este principio en Make, por lo que tenía una regla que todo lo que tenía que hacer era:

make myfile.html 

y sería ir a myfile.Rhtml y producir el archivo HTML. Ajuste para hacer PDF desde .Rnw

lo estoy usando con SCons en lugar de hacer, así que tengo un archivo Sconscript que es un poco más complejo (en parte porque sólo he comenzado a aprender a utilizar SCons, por lo que podría ser un poco enrevesada)

env=Environment() 
bld = Builder(action = '/usr/bin/Rscript knitme.R $SOURCE $TARGET', 
       suffix='.html', 
       src_suffix='Rhtml') 
env.Append(BUILDERS = {'Knit' : bld}) 
env.Knit(source='test.Rhtml',target='test.html') 

Entonces todo lo que tiene que hacer es:

scons test.html 

y me sale test.html construido a partir de test.Rhtmltest.Rhtml si ha cambiado.

Todo esto es parte de un archivo Sconstruct que construye un sitio web completo y lo copia a un servidor, basado en todo tipo de otras dependencias ..

la deriva fuera de tema ahora ...

+0

Todavía no pude hacer que funcionase lo que SConstruct. Me encantaría, algo así como en http://tex.stackexchange.com/a/26573/8272 –

2
R CMD knit file.Rmd 

es el equivalente directo a R CMD Sweave file.Rmd

funciones Últimamente, se han mejorado en rmarkdown y knitr para este tipo de trabajo sucio.Para diapositivas, he estado usando la cabecera Rmarkdown YAML para designar el formato de salida prevista y de la línea de comandos es básico, como

R -e "library(rmarkdown); render(\"file.Rmd\")" 
3

Para añadir a las otras respuestas, si quieres a tejer/procesar el archivo y abrir la salida todo en una línea que puede utilizar:

Rscript -e "rmarkdown::render('file.Rmd')" & open file.pdf 

prefiero hacerlo todo en una sola línea, porque es más fácil de ejecutar como un comando de Vim reutilizable.

También puede reemplazar open con una aplicación específica si desea utilizar el sistema no predeterminado de su sistema. Tiendo a usar esto si estoy en Windows y quiero usar Sumatra para sobreescribir una salida de PDF que está abierta actualmente (así que no tengo que acordarme de cerrarla cada vez).

+0

Agregué esto como un generador en un archivo 'SConstruct'. Ver: http://stackoverflow.com/a/38806488/1172302. –

Cuestiones relacionadas