2015-10-02 2 views
7

СинопсисВязать PDF из RMD сценария, щелкнув исполняемый файл г

Я wuold хотел произвести PDF-файл из сценария RMD просто щелкнув файл/значок, чтобы мои сотрудники не исчерпывают себя сначала открыв RStudio.

Вопрос

Когда я увидел this на R-блоггеров, и получил это работает, я думал, что приближается идеальный поток работы от сценариев, чтобы поделиться своей работой, позволяя моим коллегам выполнить файл и получить pdf с обновленными номерами в результате. Однако я не могу заставить его работать с некоторыми функциями в библиотеке knitr.

Лучший сценарий в том, что этот вопрос интересен лишь немногие из вас там, но здесь идет:

Ниже вы можете увидеть сценарий в файле с именем RexecKnit.Rmd. Единственная причина, по которой она существует, чтобы вы могли протестировать всю процедуру для себя, если хотите. Кстати, я запускаю RStudio Version 0.99.467 в Windows 7, 64 бит.

--- 
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) 
``` 

Я знаю, что это довольно длительный сценарий для тестирования, но это просто, чтобы убедиться, что все работает, когда я выполнить сценарий по двойному щелчку эта маленькая красота .Rexe которая является файл с именем вызывающий knitr.Rexe (например, в сообщении R-Bloggers), содержащем этот маленький фрагмент кода:

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

И это работает так, как ожидалось. При двойном кликивании файла скрипт запускается без открытия R или Rstudio, а файл .md создается в желаемой папке. И тот же скрипт работает, когда он хранится как .Rexe-файл и как .R-файл. Но вот проблема:

Я хочу, чтобы произвести PDF, и в соответствии с наконечником here, заменив

knit('RexecKnit.Rmd') 

с

rmarkdown::render("RexecKnit.Rmd") 

должен сделать трюк, пока заголовок YAML включает в себя следующее:

output: pdf_document 

И это wo rk (это означает, что pdf создается с каждой деталью, указанной в сценарии длины), по крайней мере, когда он запускается как .R-файл. К моему разочарованию, он не работает, когда он запускается из файла .Rexec так:

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

Спасибо за то, что смотреть на это!

ответ

2

Предполагая, что один самостоятельно установлен pandoc на Windows машине (, который оказался корень проблемы в этом случае), она может сделать это следующим образом:

Первый: сделать .R файл с содержанием, как показано ниже

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) 

Второй: сделать .bat файл

Создайте файл .bat, скажем «my_bat_file.bat», и включите текст ниже. Тем не менее, пути должны быть скорректированы:

"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" 

Третий: Поручить Windows Task Scheduler

Если данные часто обновляется, можно ГРАФИК планировщика задач в Windows, чтобы повторно выполнить файл .bat один раз в неделю в определенное время по ночам, так что отчеты там утром.

+0

Ваше предложение работает так же, как и rmarkdown :: render («RexecKnit.Rmd»). Он работает как .R-файл, но не как файл .Rexec. – vestland

+0

Я отредактировал ответ. –

+0

Я не уверен, для чего нужен «C: \ path_to_your_file \ your_file.Rout», но теперь я даю ему возможность. – vestland

Смежные вопросы