我有以下问题;有两个大文档,一个写在R Markdown
(check.Rmd),另一个写在R knitr
(test.Rnw)。在第一个文档中,我们有如下代码:
\section{Organisations Test}
\textbf{Running Organisations Checks}
<<CreateOrganisations, echo=FALSE, progress=TRUE, warning=FALSE, eval=TRUE>>=
source("OrganisationsTest.R")
OrganisationsTest(current_schema,server,user,pass)
@
另一个如下:
2. check the downwards shock
```{r chunk_Int_Sh_p2, echo=FALSE}
unique(param.int.shock.tab[SHOCKTYPE=="SHOCK_DOWN"&PERIODEND<21|PERIODEND==90, list( Maturity=PERIODEND, Shock_value=100*SHOCKVALUE)])
```
现在问题是:如何将两者结合起来,以便我只有一个脚本可以运行并一个接一个地编译。仅仅是为了澄清,我的意思是在两个文档中没有任何更改,我如何只有一个脚本适用于第一个文档knit PDF
来创建pdf而另一个CompilePDF
?
我想在Linux中可以编写一个shell脚本,但在窗口中使用RStudio
的回合是什么?
我真的很感激每一个暗示我都有点无奈!
附录:原则上如下:如果你要编译一个knitr文件你会在RStudio中使用底部,我们有2个文件,对于Markdown文件,可以使用RStudio中的底部,但我们想要将两者放在一起并在一个底部点击。怎么可能?
答案 0 :(得分:3)
RStudio按钮“编译PDF”(用于RNW文档)和“编织PDF”(用于RMD文档)很方便,但在这种情况下,了解他们做什么很重要为了重现相同或类似的行为。
总结问题,它要求一种方法将两个文件(RMD和RNW文档)转换为PDF,最好使用上面提到的两个按钮之类的按钮。
不幸的是(据我所知),无法向RStudio GUI添加任何用户定义的按钮。但是编写一个编译两个文档的R脚本很简单。
在下面我假设有两个文件:
first.Rmd
:
This is a RMD file.
```{r, echo=FALSE}
plot(1)
```
second.Rnw
:
\documentclass{article}
\begin{document}
This is a RNW file.
<<>>=
plot(1)
@
\end{document}
要将first.Rmd
编译为PDF,我们需要以下内容(请参阅How to convert R Markdown to PDF?):
library(knitr)
library(rmarkdown)
knit(input = "first.Rmd")
render(input = "first.md", output_format = "pdf_document")
knit
调用从first.md
生成first.Rmd
,在块中执行R代码。 render
将生成的markdown文件转换为PDF。 [注意底部的附录!]
要将first.Rnw
编译为PDF,我们只需使用knit2pdf
:
knit2pdf("second.Rnw")
将两个片段复制到一个R脚本中并单击“源”尽可能接近“一键式解决方案”。
但请注意,这些代码段与“编译/编织PDF”按钮非常相似,但不相同。 “编译”按钮启动新R会话,而上述解决方案使用当前会话。
knit
和knit2pdf
都使用envir = parent.frame()
。这意味着块中的R代码在调用 enironment中执行(参见What is the difference between parent.frame()
and parent.env()
in R)。这可能是一个有用的功能,例如将变量“传递”到块中,但了解它很重要。否则,文档可能在一个会话中编译得很好(调用环境中存在某些变量)但不能在另一个会话中编译(缺少这些变量)。因此,就再现性而言,该特征有点危险。作为解决方案,可以使用envir = new.env(parent = as.environment(2))
;有关该主题的详细信息,请参阅knitr inherits variables from a user's environment, even with envir = new.env()
。我刚刚意识到要关注render
:
如果输入需要编织,则在
knit
之前调用pandoc
。
(来源:?render
)
因此,knit(input = "first.Rmd"); render(input = "first.md", output_format = "pdf_document")
可以简化为render(input = "first.Rmd", output_format = "pdf_document")
。上述envir
的{{1}}问题也适用于knit
。