2015-10-02 10 views
7

klicken SynopsisStrick pdf von rmd Skript durch eine ausführbare Datei r

ich wuold gerne eine PDF-Datei von einem rmd Skript zu erzeugen, nur durch eine Datei klicken/ein Symbol, so dass meine Mitarbeiter sich nicht erschöpfen indem Sie zuerst RStudio öffnen.

Die Frage

Wenn ich this auf R-Blogger sah, und hätte es funktioniert, ich dachte, dass ich meine Arbeit zu teilen den perfekten Arbeitsablauf von scripting Annäherung durch meine Mitarbeiter lassen ausführen, um eine Datei und erhält ein PDF mit aktualisierten Nummern als Ergebnis. Ich kann jedoch nicht mit einigen Funktionen der Knitr-Bibliothek arbeiten.

Im besten Fall ist, dass diese Frage nur ein paar von euch da draußen interessant, aber hier geht:

Im Folgenden finden Sie einen Skript in einer Datei RexecKnit.Rmd genannt sehen können. Der einzige Grund, warum es da ist, ist, dass Sie das ganze Verfahren für sich testen können, wenn Sie wollen. Übrigens, ich verwende RStudio Version 0.99.467 unter 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) 
``` 

Ich weiß, das ist ein ziemlich langwieriger Skript für Testzwecke, aber es ist nur um sicher zu stellen, dass alles funktioniert, wenn ich das Skript auf einen Doppelklick auf diese kleine Schönheit .Rexe auszuführen, die eine Datei Anrufer knitr.Rexe genannt ist (wie in der R-Bloggers Post) mit diesem kleinen Stück Code:

library(knitr) 
library(rmarkdown) 
setwd('C:/repos/r_tutorials/executable R files') 
knit('RexecKnit.Rmd') 
Sys.sleep(3) 

Und das funktioniert wie erwartet. Wenn Sie die Datei doppelt anklicken, wird das Skript ausgeführt, ohne R oder Rstudio zu öffnen, und im gewünschten Ordner wird eine .md-Datei erstellt. Und dasselbe Skript funktioniert, wenn es als .Rexe-Datei und als .R-Datei gespeichert wird. Aber hier ist das Problem:

Ich mag ein PDF erzeugen, und nach einer Spitze here,

knit('RexecKnit.Rmd') 

mit

rmarkdown::render("RexecKnit.Rmd") 

ersetzen sollte, solange die YAML-Header den Trick schließt das ein:

output: pdf_document 

Und es tut wo rk (was bedeutet, dass die PDF-Datei mit allen Details erstellt wird, die im lengthy-Skript angegeben sind), zumindest wenn sie als R-Datei ausgeführt wird. Zu meiner Enttäuschung, funktioniert es nicht, wenn es aus einer .Rexec Datei wie folgt ausgeführt wird:

library(knitr) 
library(rmarkdown) 
setwd('C:/repos/r_tutorials/executable R files') 
rmarkdown::render("RexecKnit.Rmd") 
Sys.sleep(3) 

Thank you einen Blick auf diese für mit!

Antwort

2

Unter der Annahme ein pandoc auf Windows Maschine unabhängig installiert hat (, die die Wurzel des Problems in diesem Fall entpuppten), sie es in der folgenden Art und Weise tun:

Erste: make a .R Datei mit dem Inhalt wie unten

library(knitr) 
library(rmarkdown) 
setwd('C:/repos/r_tutorials/executable R files') 
knit("RexecKnit.Rmd") 

# render the generated markdown file. 
render("RexecKnit.md") 

Sys.sleep(3) 

Zweiter: macht eine .bat Datei

Erstellen Sie eine .bat-Datei, sagen Sie "my_bat_file.bat", und fügen Sie den folgenden Text ein. Allerdings müssen die Wege eingestellt werden:

"C:\R\R-3.2.2\bin\x64\R.exe" CMD BATCH --vanilla --slave "C:\path_to_your_file\your_file.R" "C:\path_to_your_file\your_file.Rout" 

Dritte: Windows Task Scheduler

Instruieren Wenn die Daten häufig aktualisiert wird, kann man den Taskplaner in Windows shedule wiederholt die .bat Datei einmal pro Woche ausführen Zu bestimmten Zeiten in der Nacht, so Berichte sind am Morgen.

+0

Ihre Suggestection funktioniert genauso wie rmarkdown :: render ("RexecKnit.Rmd"). Es funktioniert als eine R-Datei, aber nicht als eine .Rexec-Datei. – vestland

+0

Ich habe die Antwort bearbeitet. –

+0

Ich bin mir nicht sicher, was die "C: \ Pfad_zu_Ihr_Datei \ dein_Datei.Rout" ist, aber ich versuche es jetzt. – vestland

Verwandte Themen