概要
我想通过单击文件/图标从rmd脚本生成pdf文件,这样我的同事就不会通过首先打开RStudio来耗尽自己。
问题
当我在R-bloggers上看到this并让它正常工作时,我以为我正在接近完成从脚本编写到分享我的工作的完美工作流程,让我的同事执行文件并获得更新数字的pdf结果是。但是,我无法使用knitr库中的某些函数。
最好的情况是,这个问题对于你们中的一些人来说很有意思,但是这里有:
您可以在下面看到名为 RexecKnit.Rmd 的文件中的脚本。 这是唯一的原因,如果你愿意,你可以自己测试整个程序。顺便说一句,我在Windows 7,64位上运行RStudio版本0.99.467。
---
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 (就像在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
它确实有效(意味着pdf是使用lenghty脚本中指定的每个细节创建的),至少在它作为.R文件运行时。 令我失望的是,它从这样的.Rexec文件运行时不起作用:
library(knitr)
library(rmarkdown)
setwd('C:/repos/r_tutorials/executable R files')
rmarkdown::render("RexecKnit.Rmd")
Sys.sleep(3)
感谢您查看此内容!
答案 0 :(得分: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文件,说&#34; my_bat_file.bat&#34;,并包含以下文字。但是,必须调整路径:
"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
文件,因此早上会有报告。