使用knitr自动添加beamer幻灯片

时间:2016-09-26 17:29:25

标签: r knitr

假设我使用xtable.Rnw文件中列出了knitr个对象:

\begin{frame}[slide1]
<<echo=FALSE, results="asis">>=
    library(xtable)
    data(tli)
    fm1 <- aov(tlimth ~ sex + ethnicty + grade + disadvg, data = tli)
    fm2 <- lm(tlimth ~ sex*ethnicty, data = tli)
    xtabs<-list(xtable(fm1), xtable(fm2))
    #print first table
    print(xtabs[[1]])
@
\end{frame}

\begin{frame}[slide2]
<<echo=FALSE, results="asis">>=
    #print second table
    print(xtabs[[2]])
@
\end{frame}

因为在我的真实项目中,xtabs是一个长度为&gt;的列表。 100,我想知道是否有办法包装`print(xtabs [[i]])&#39;在一个块中,以便在每张幻灯片中逐个打印相同的设置,例如:

\begin{frame}[slides]
<<echo=FALSE, results="asis">>=
    library(xtable)
    data(tli)
    fm1 <- aov(tlimth ~ sex + ethnicty + grade + disadvg, data = tli)
    fm2 <- lm(tlimth ~ sex*ethnicty, data = tli)
    xtabs<-list(xtable(fm1), xtable(fm2))
    print(xtabs[[1]])
    print(xtabs[[2]])
    ...
    print(xtabs[[x]])
@
\end{frame}

2 个答案:

答案 0 :(得分:1)

如果你包含allowframebreaks选项,那么你可以将它们全部放入一个帧中,而beamer可以将它分成多个帧。您可能还希望通过包括\pagebreak<presentation>

来控制帧被破坏的位置

可能是这样的:

\begin{frame}[allowframebreaks]
<<echo=FALSE, results="asis">>=
for(i in 1:n){
  print(xtabs[[i]])
  cat('\n\\pagebreak<presentation>\n')
}
@
\endframe

我通常使用markdown输入来编织,所以noweb可能需要一些不同的东西。但是使用markdown可能就像:

## Frame title goes here {.allowframebreaks}

```{r rblock, roptions}
#R code goes here
```

这对我有用。

答案 1 :(得分:0)

<<echo=FALSE, results='asis'>>=
for (i in 1:length(xtabs)) {  
    cat("\\begin{frame}[fragile]{Survival Analysis}\n")
        print(xtabs[[i]], caption.placement="top")
    cat("\\end{frame}\n")
}
@