我有以下问题;有两份大文件,一份写在 R Markdown
(check.Rmd) 和 R knitr
中的另一个(测试.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
又如何呢?在 window 里?
真的很感谢每一个提示我都有点无助!
附录:原则上如下:我们有2个文件,如果您要编译一个knitr文件,您将使用 RStudio 中的底部,对于 Markdown 文件,可以使用 RStudio 中的底部,但我们希望将两者放在一起并单击一个底部。怎么可能?
最佳答案
RStudio 按钮“编译 PDF”(对于 RNW 文档)和“编织 PDF”(对于 RMD 文档)很方便,但在像这样的情况下,了解它们的作用非常重要为了重现相同或相似的行为。
总结一下这个问题,它要求一种将两个文件(RMD 和 RNW 文档)转换为 PDF 的方法,最好使用像上面提到的两个按钮这样的按钮。
不幸的是,(据我所知)不可能向 RStudio GUI 添加任何用户定义的按钮。但编写编译这两个文档的 R 脚本很简单。
下面我假设有两个文件:
first.Rmd
:This is a RMD file. ```{r, echo=FALSE} plot(1) ```
第二个.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.Rmd
生成 first.md
,并执行 block 中的 R 代码。 render
将生成的 Markdown 文件转换为 PDF。 [注意底部的附录!]
要将first.Rnw
编译为PDF,我们可以简单地使用knit2pdf
:
knit2pdf("second.Rnw")
将两个代码段复制到一个 R 脚本中并单击“源”尽可能接近“一键解决方案”。
但是,请注意,这些片段的功能与“编译/编织 PDF”按钮非常相似,但并不相同。 “编译”按钮启动新的 R session ,而上述解决方案使用当前 session 。
- 在执行代码片段之前,请确保使用正确的工作目录。
knit
和knit2pdf
默认情况下都使用envir =parent.frame()
。这意味着 block 中的 R 代码在调用环境中执行(请参阅 What is the difference betweenparent.frame()
andparent.env()
in R )。这可能是一个有用的功能,例如将变量“传递”到 block ,但了解它很重要。否则,文档可能在一个 session 中编译得很好(调用环境中存在某些变量),但无法在另一个 session 中编译(缺少这些变量)。因此,这个功能在可重复性方面有点危险。作为解决方案,可以使用 envir = new.env(parent = as.environment(2)) ;请参阅knitr inherits variables from a user's environment, even withenvir = new.env()
了解有关该主题的更多详细信息。
我刚刚意识到要遵循渲染
:
If the input requires knitting then
knit
is called prior topandoc
.
(来源:?渲染
)
因此,knit(input = "first.Rmd"); render(input = "first.md", output_format = "pdf_document")
可以简化为 render(input = "first.Rmd", output_format = "pdf_document")
。上面的 knit
的 envir
问题也适用于 render
。
关于一起运行 R Markdown (check.Rmd ) 和 R knit (test.Rnw ) 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33983298/