Sinossipdf Knit dallo script rmd facendo clic su un file eseguibile r
Mi piace wuold per produrre un file pdf da uno script rmd semplicemente facendo clic su un file/un'icona in modo che i miei colleghi non si esauriscono aprendo prima RStudio.
La domanda
Quando ho visto this su R-blogger, e ottenuto che funziona, ho pensato che mi stavo avvicinando il flusso di lavoro perfetto da script per condividere il mio lavoro lasciando i miei colleghi eseguire un file e ottenere un pdf con numeri aggiornati come risultato. Tuttavia, non riesco a farlo funzionare con alcune delle funzioni nella libreria knitr.
Migliore delle ipotesi è che questa domanda è interessante solo pochi di voi là fuori, ma qui va:
Qui sotto potete vedere uno script in un file chiamato RexecKnit.Rmd. L'unica ragione per cui è lì è che puoi testare l'intera procedura per conto tuo se vuoi. A proposito, sto usando RStudio Versione 0.99.467 su Windows 7, 64 bit.
---
title: "Executable R, rmd and pdf"
header-includes: \usepackage{caption} \usepackage{fancyhdr}
output: pdf_document
fig_caption: no
---
\addtolength{\headheight}{0.5cm}
\pagestyle{fancyplain}
\renewcommand{\headrulewidth}{0pt}
```{r Settings, echo = FALSE, eval = TRUE, results = "hide", warning = FALSE, message = FALSE}
rm(list=ls())
pck_loaded <- (.packages())
# Packages to load
pck_toload <- c('ggplot2', 'xts', 'quantmod', 'zoo', 'PerformanceAnalytics',
'tseries', 'mvtnorm', 'data.table', 'XLConnect', 'sqldf', 'stargazer', 'xtable', 'gridExtra', 'grid', 'TTR')
# Load packages
for(i in 1:length(pck_toload)) {
if (!pck_toload[i] %in% pck_loaded)
print(pck_toload[i])
library(pck_toload[i], character.only = TRUE)
}
```
\captionsetup[table]{labelformat=empty}
```{r repex1, echo = FALSE, eval = TRUE, results = "asis", warning = FALSE, message = FALSE, fig.width = 12, fig.height = 8}
# Data table with formatted numbers and text
v1 <- c("\\colorbox{white}{0.05}" , "\\colorbox{yellow}{0.57}", "\\colorbox{red}{-0.99}")
v2 <- c("An unexpected comment", "A qurious question", "And an insightful answer")
dt1 <- data.table(v1,v2)
# Data table using xtable
print(xtable(dt1,
caption = 'Fancy table'),
caption.placement = 'top',
comment = FALSE,
sanitize.text.function = function(x) x)
```
```{r repex2, echo = FALSE, eval = TRUE, results = "asis", warning = FALSE, message = FALSE, fig.width = 12, fig.height = 8}
# Data table wiht random numbers
dt2 <- data.table(replicate(2,sample(0:100,10,rep=TRUE)))
# ggplot of random numbers
plx <- ggplot(data=dt2 ,aes(x=V1, y = V2))
plx <- plx + geom_line(color = 'blue', fill = 'grey')
plx <- plx + theme_classic()
plx <- plx + labs(title="Random numbers", x="x-axis",y="y-axis")
plot(plx)
```
So che è uno script abbastanza lunga a scopo di test, ma è solo per assicurarsi che tutto funzioni quando eseguo lo script su un doppio clic questa piccola bellezza che è un file chiamato chiamante knitr.Rexe (come nel post R-Bloggers) contenente questo piccolo pezzo di codice:
library(knitr)
library(rmarkdown)
setwd('C:/repos/r_tutorials/executable R files')
knit('RexecKnit.Rmd')
Sys.sleep(3)
E questo funziona come previsto. Facendo doppio clic sul file, lo script viene eseguito senza aprire R o Rstudio e un file .md viene prodotto nella cartella desiderata. E lo stesso script funziona quando è memorizzato come file .Rexe e come file .R. Ma ecco il problema:
voglio produrre un pdf, e in base ad una punta here, sostituendo
knit('RexecKnit.Rmd')
con
rmarkdown::render("RexecKnit.Rmd")
dovrebbe fare il trucco fino a quando l'intestazione YAML include questo:
output: pdf_document
E fa wo rk (il che significa che il pdf viene creato con ogni dettaglio specificato nello script di lunghezza), almeno quando viene eseguito come file .R. Per la mia delusione, ma non funziona quando viene eseguito da un file .Rexec come questo:
library(knitr)
library(rmarkdown)
setwd('C:/repos/r_tutorials/executable R files')
rmarkdown::render("RexecKnit.Rmd")
Sys.sleep(3)
Grazie per avere uno sguardo a questo!
Il tuo suggerimento funziona allo stesso modo di rmarkdown :: render ("RexecKnit.Rmd"). Funziona come un file .R, ma non come un file .Rexec. – vestland
Ho modificato la risposta. –
Non sono sicuro di cosa sia "C: \ path_to_your_file \ your_file.Rout", ma ci sto provando ora. – vestland