一起运行 R Markdown (check.Rmd ) 和 R knit (test.Rnw ) 文件

标签 r markdown knitr r-markdown

我有以下问题;有两份大文件,一份写在 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文件,您将使用compilePDF RStudio 中的底部,对于 Markdown 文件,可以使用 KnitPDF 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

  • 在执行代码片段之前,请确保使用正确的工作目录。
  • knitknit2pdf 默认情况下都使用 envir =parent.frame()。这意味着 block 中的 R 代码在调用环境中执行(请参阅 What is the difference between parent.frame() and parent.env() in R )。这可能是一个有用的功能,例如将变量“传递”到 block ,但了解它很重要。否则,文档可能在一个 session 中编译得很好(调用环境中存在某些变量),但无法在另一个 session 中编译(缺少这些变量)。因此,这个功能在可重复性方面有点危险。作为解决方案,可以使用 envir = new.env(parent = as.environment(2)) ;请参阅knitr inherits variables from a user's environment, even with envir = new.env()了解有关该主题的更多详细信息。

我刚刚意识到要遵循渲染:

If the input requires knitting then knit is called prior to pandoc.

(来源:?渲染)

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

关于一起运行 R Markdown (check.Rmd ) 和 R knit (test.Rnw ) 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33983298/

相关文章:

vim - 有没有可以预览 Markdown 文件的 Vim 插件?

r - knitr 如何使用 xtable 在 latex 表中获取指数/脚注

r - R 中 arules 的序列事务类

r - ignoreInit 不适用于动态内容

r - 从 R 中的传单包创建 html 时字符编码错误

R knitr Markdown : Output Plots within For Loop

r - 使用 "twocolumn" "classoption"进行 Knit 转 PDF 时如何创建全宽图形?

r - 1 :nrow(newdata) : argument of length 0 while using SVM predict 中出现错误

github - 是否可以在 GitHub markdown 中创建工具提示、信息提示或提示?

markdown - 如何在 jekyll 中的 markdown 文件中包含 HTML 文件?