【问题标题】:run an R Markdown (check.Rmd ) and an R knitr (test.Rnw ) file together一起运行 R Markdown (check.Rmd) 和 R knitr (test.Rnw) 文件
【发布时间】:2016-03-03 04:27:08
【问题描述】:

我有以下问题;有 2 个大文件,一个写在 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 脚本,但在 windows 中使用 RStudio 又如何呢? 我真的很感谢每一个提示我有点无助!

附录:原则上如下:我们有2个文件,如果你要编译一个knitr文件,你会在RStudio中使用bottom,对于Markdown文件,可以使用@987654322 @RStudio 中的底部,但我们想将两者放在一起并单击一个底部。怎么可能?

【问题讨论】:

  • 尝试在 test.Rnw 中使用类似 \input{check.Rmd} 的乳胶 input 命令。
  • 你知道knitknit2pdf这两个函数吗?我在理解您的工作时遇到了一些困难,但听起来您只需要一个调用这些(或类似)函数的 R 脚本。
  • 原则上如下:我们有2个文件,如果你要编译一个knitr文件,你会在RStudio中使用compilePDFbottom,对于Markdown文件,你可以在RStudio中使用KnitPDFbottom , 但我们想将两者放在一起并点击底部。这怎么可能?

标签: r markdown knitr r-markdown


【解决方案1】:

RStudio 按钮“Compile PDF”(用于 RNW 文档)和“Knit 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.Rmd 生成 first.md,执行块中的 R 代码。 render 将生成的 markdown 文件转换为 PDF。 [注意底部的附录!]

要将first.Rnw编译为PDF,我们可以简单地使用knit2pdf

knit2pdf("second.Rnw")

将两个 sn-ps 复制到一个 R 脚本中并单击“源”尽可能接近“一键解决方案”。

但是,请注意,sn-ps 所做的事情与“编译/编织 PDF”按钮非常相似,但它不完全相同。 “编译”按钮启动一个新的 R 会话,而上面的解决方案使用 当前会话

  • 在执行 sn-ps 之前,请确保使用正确的工作目录。
  • 默认情况下knitknit2pdf 都使用envir = parent.frame()。这意味着块中的 R 代码在 calling 环境中执行(参见 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

如果输入需要编织,则在 pandoc 之前调用 knit

(来源:?render

因此,knit(input = "first.Rmd"); render(input = "first.md", output_format = "pdf_document") 可以简化为render(input = "first.Rmd", output_format = "pdf_document")。上述knitenvir 问题也适用于render

【讨论】:

  • 上面的错字:“...要将first.Rnw编译为PDF,我们可以简单地使用...”应该是“...要将second.Rnw编译为PDF,我们可以简单地使用. ……”。顺便谢谢你的回答。
猜你喜欢
  • 2019-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多