如何使用多个Rnw文件?

时间:2017-03-30 09:59:32

标签: r rstudio sweave

我有一个名为“main.Rnw”的Rnw文件,它包含了这个

\documentclass{article}
\usepackage{float} 
\title{Something}
\author{John Smith}
\setkeys{Gin}{width=1.15\textwidth}
\begin{document}
\SweaveOpts{concordance=TRUE}
\thispagestyle{empty}
\maketitle
\newpage
\thispagestyle{empty}
\tableofcontents
\newpage
\SweaveInput{reports/Child.Rnw}
\end{document}

在文件“Child.Rnw”中,我有:

% !Rnw root = Main.Rnw
 \documentclass{article}
 \usepackage{float} 
\begin{document}
\SweaveOpts{concordance=TRUE}
\section{section}
 Something something
\end{document}

现在它给出了错误:

  Error in SweaveReadFile(c(ifile, file), syntax, encoding = encoding) : 
  no Sweave file with name ‘./reports/Child.Rnw’ found
  Calls: <Anonymous> -> SweaveReadFile -> SweaveReadFile
  Execution halted

如果我更改代码并从命令\SweaveInput{reports/Child.Rnw}中删除报告(因此代码为\SweaveInput{Child.Rnw}),则会出错:

Writing to file Main.tex
Processing code chunks with options ...
 Error in seq.default(from = which + 1L, length.out = length(linesout) -  : 
 'from' must be of length 1
Calls: <Anonymous> -> <Anonymous> -> seq -> seq.default
In addition: Warning messages:
1: In 1L:which : numerical expression has 2 elements: only the first used
2: In seq.default(from = which + 1L, length.out = length(linesout) -  :
first element used of 'length.out' argument
Execution halted

我做错了什么? 我使用R Studio。

2 个答案:

答案 0 :(得分:1)

您的代码无效的问题之一是因为您定义的文档两次\begin{document}\end{document}位于Main.RnwChild.Rnw。< / p>

您的子文件\SweaveInput{Child.Rnw}应如下所示:

% !Rnw root = main.Rnw
\SweaveOpts{concordance=TRUE}
\section{section}
 Something something

尝试使用此文件并编译PDF。

我得到3页的PDF文件

首先是标题,第二内容和第三部分。

enter image description here

答案 1 :(得分:0)

我没有使用Sweave的经验,但以下内容应该是knitr

如果它们应该相同,则不必为Child.Rnw指定新的文档规范,因为默认行为是继承父项的属性。

向编织者扫描

#Convert Sweave specific options to knitr compatible version
#this will generate a new file named Parent-knitr.Rnw
library("knitr")
Sweave2knitr("Parent.Rnw")

文件路径:

为了进行测试,让我们假设以下假设目录结构

D:/project/Parent.Rnw

D:/project/reports/Child.Rnw

如果Child.Rnw文件与Parent.Rnw位置位于同一位置     以下应该工作

\Sexpr{knit_child('Child.RnW')}

如果出现在不同的位置,您需要指定Child.Rnw和两者的完整路径     绝对和相对路径应该起作用

绝对路径,例如“D:/project/reports/Child.Rnw”

相对路径,例如“../ reports / Child.Rnw”

.表示当前目录,..表示从工作目录和工作目录向上移动一级     由knitr默认设置为Parent.Rnw的目录。     有关更多文档,请参阅?knit_child

<强> Parent.Rnw:

\documentclass{article}
\usepackage{float} 
\title{Testing Parent Child Processing with knitr}
\author{John Smith}
\setkeys{Gin}{width=1.15\textwidth}
\begin{document}

<<include=FALSE>>=
library(knitr)
opts_chunk$set(
concordance=TRUE
)
@

\thispagestyle{empty}
\maketitle
%\newpage
\thispagestyle{empty}
%\tableofcontents
%\newpage
%\SweaveInput{reports/Child.Rnw}



\Sexpr{knit_child('./reports/Child.RnW')}
\end{document}

<强> Child.Rnw:

\textbf{Testing Child.Rnw Processing:}

<<testChild>>=

data(mtcars)
plot(hclust(dist(mtcars)))


@

PDF转换:

knit2pdf("Parent-knitr.Rnw")

<强>输出:

enter image description here