如何在r包中包含RMarkdown文件?

如何在r包中包含RMarkdown文件?,r,knitr,r-markdown,R,Knitr,R Markdown,我正在用R创建一个包,我还想包含一个R标记文件。此RMarkdown模板包含我的包中的函数,并通过knitr呈现为html文档 目标是定期运行一个函数(通过cronjob)来呈现RMarkdown文件,以便生成每周报告 如何将这些文件添加到R包(如.Rmd)中,并在进行函数调用以呈现所述模板时引用.Rmd,特别是因为使用use\u data(myrmarkdown.Rmd)将无法获得所需的结果。创建R包时,将有一个包含以下内容的目录树(除其他外)在包的根目录中:DESCRIPTION、NAMES

我正在用R创建一个包,我还想包含一个R标记文件。此RMarkdown模板包含我的包中的函数,并通过knitr呈现为html文档

目标是定期运行一个函数(通过cronjob)来呈现RMarkdown文件,以便生成每周报告

如何将这些文件添加到R包(如.Rmd)中,并在进行函数调用以呈现所述模板时引用.Rmd,特别是因为使用
use\u data(myrmarkdown.Rmd)
将无法获得所需的结果。

创建R包时,将有一个包含以下内容的目录树(除其他外)在包的根目录中:
DESCRIPTION
NAMESPACE
R/
目录。如果您还有
inst/
目录,则该目录中的所有内容都会逐字复制到包目录中,不包括
inst/

例如,如果包目录如下所示:

+- DESCRIPTION
+- NAMESPACE
+- inst/
|  \- rmd/
|     \- file.Rmd
\- R/
   +- file1.R
   +- file2.R
   \- file3.R
然后,当您构建并安装软件包时,您将在软件包库的以下位置找到:

+- DESCRIPTION
+- INDEX
+- NAMESPACE
+- rmd/
|  \- file.Rmd
\- R/
   +- packagename
   +- packagename.rdb
   \- packagename.rdx
(其他文件/目录是在此过程中创建的,为了简单起见,我将忽略它们。)

您需要知道的最后一条信息是“安装后如何访问此文件?”因为有些系统在不同的目录中安装R库,而且用户经常在个人R库中安装软件包,因此您无法事先知道在何处查看Enter
system.file

system.file("rmd", "file.Rmd", package = "packagename")
## [1] "c:/R/R-3.1.3/library/packagename/rmd/file.Rmd"

这可以用于整个Rmd文件。我将其用于Rmd呈现文档的公司特定模板。也就是说,我寻找“包含”文件来个性化LaTeX,以便呈现的PDF具有页眉/页脚,并按照我们想要的方式进行样式设置。这一步需要编写一个函数来替换
PDF\u文档
(例如)在Rmd YAML标题中,这一点在中得到了很好的阐述。

我结束了这篇文章,因为它实际上是关于“如何在我的包中包含$FOO”的一系列现有问题中的两个,答案总是“below
inst/
”。@DirkEddelbuettel虽然这对你来说很明显,因为你有更多的结构元知识,下面的答案是精确的我想知道我在找什么,链接的帖子不会回答我的问题。特别是,访问Rmd(不同于简单地调用
data(x)
)是关键。@Danielgan,很高兴它有帮助,但当我们在不同的标签下写x次相同的东西时,网站并没有变得更好。对于这一点,答案基本上是肯定的“使用
system.file()
”——所以只要尝试一下
system.file(“doc”,“knitr intro.Rmd”,package=“knitr”)
,无论您在何处以及如何安装knitr,它都会为您提供文件的完整路径——因为它来自
inst/doc/knitr intro.Rmd
,然后R就可以计算这些东西。这是非常有文档记录的(如果一开始很难找到)。我投票重新打开,因为1)此用例不同于重复的用例,因为文件必须通过
路径访问,而不是使用
数据()
,2)链接问题的答案模糊不清,过分依赖于阅读外部来源。虽然阅读链接答案建议的来源可能会帮助你找出该做什么,但他们肯定不会回答这个问题。非常感谢@r2evans,这非常有帮助,正是我要找的答案,谢谢!@Konrad,我不知道在编辑过程中(我喜欢它的直截了当),但我在windows上使用正斜杠甚至混合斜杠从来没有遇到过问题,而且正斜杠对于其他所有操作系统都是正确的答案(我使用过R)。一旦我了解到windows的R可以很好地使用正斜杠,我就很少在路径中使用反斜杠(并且经常超越
fsep=“/”
@r2evans知道这一点很好,我认为这可能会有问题,因此,如果您从未遇到过任何问题,我可能是错的。我总是尝试使用
file.path
,只是为了安全起见,但可能过于谨慎