Insira o arquivo Tex no arquivo knitr

Insira o arquivo Tex no arquivo knitr

Estou mostrando um exemplo simples aqui apenas para enquadrar a questão.

\documentclass{article}

\begin{document}

<<>>=
library('ggplot2')
dataset <- diamonds
@

\begin{table}[htbp]
  \centering
  \begin{tabular}{c|c|c|c}
  \textbf{Name} & \textbf{Columns} \\\hline \hline
  dataset & \Sexpr{length(colnames(dataset))} \\
  \end{tabular}
  \caption{Repeated table}
\end{table}

\end{document}

Agora estou repetindo esta tabela (tabela exata) várias vezes no arquivo. (Imagine substituir o conjunto de dados por outro conjunto antes de chamar esta tabela).

\documentclass{article}

\begin{document}

<<>>=
library('ggplot2')
dataset <- diamonds;
@

\input{table-file.tex}

\end{document}

Estou colocando toda a parte tabular neste arquivo e, em seguida, inserindo-a em vários lugares. Mas não consigo fazer isso funcionar. Eu queria saber se isso é possível? quaisquer abordagens melhores para tornar esta tabela "modular".

Obrigado

Responder1

Aqui está um exemplo usando o processo de arquivo filho knitr de acordo com a documentação do knitr yihui.name/knitr/demo/child.

Primeiro o novo arquivo principal que chamei de 'knitr01.Rnw'

\documentclass{article}

\begin{document}

<<>>=
library('ggplot2')
dataset <- diamonds
@

<<child='child-knitr01.Rnw'>>=
@

<<>>=
dataset<-mtcars
@

<<child='child-knitr01.Rnw'>>=
@
\end{document}

Observe que inseri o filho duas vezes, cada um com um conjunto de dados diferente.

E o arquivo filho que chamei de 'child-knitr01.Rnw'.

\begin{table}[htbp]
  \centering
  \begin{tabular}{c|c|c|c}
  \textbf{Name} & \textbf{Columns} \\\hline \hline
  dataset & \Sexpr{length(colnames(dataset))} \\
  \end{tabular}
  \caption{Repeated table}
\end{table}

Quando executado primeiro em 'knit' e depois em 'pdflatex', resulta em

insira a descrição da imagem aqui

Para continuar a demonstração de integridade, isso também permite que arquivos filhos insiram netos.

O knitr01.Rnw é alterado da seguinte forma.

\documentclass{article}
\begin{document}
<<>>=
library('ggplot2')
dataset <- diamonds
title="These are diamonds"
@

<<child='child-knitr01.Rnw'>>=
@

<<>>=
dataset<-mtcars
title="These are cars"
@

<<child='child-knitr01.Rnw'>>=
@

\end{document}

Aqui está o arquivo 'child-knitr01.Rnw' revisado

\begin{table}[htbp]
  \centering
  \begin{tabular}{c|c|c|c}
  \textbf{Name} & \textbf{Columns} \\\hline \hline
  dataset & \Sexpr{length(colnames(dataset))} \\
  \end{tabular}
  \caption{\Sexpr{paste(substr(capture.output(print(title)),5,50))}}
  % The 5 is to remove some leading R stuff (try with 1 to see why)
  % The 50 is chosen to be longer than the string
\end{table}

<<child='grand-child-knitr01.Rnw'>>=
@

E aqui está o arquivo ‘grand-child-knitr01.Rnw’

Demonstration that you can call on 'grandchildren' files with knitr.

<<>>=
names(dataset)  
@

E a saída é: insira a descrição da imagem aqui

informação relacionada