在knitr

时间:2016-09-19 18:21:35

标签: r latex knitr

我正在使用knitr迭代生成LaTeX表。一切都很好,除了我在每张桌子前留下额外的标记。这是一个简单的例子,尽管这可以作为更复杂问题的模板,即不同大小的表,不同的数据集等。

我可以做些什么来摆脱每张桌子前的额外文字?

\documentclass{article}
\usepackage{setspace, relsize}
\usepackage[margin=.5in, landscape]{geometry} 
\usepackage{pdfpages}
\begin{document}

<<setup, include=FALSE>>=
opts_chunk$set(echo=FALSE, warning = FALSE, message = FALSE, cache = FALSE, error = FALSE)
library("ggplot2")
library("knitr")
library("Hmisc")

mytable_function = function(mydata){
  foo = as.matrix(head(mydata))
  colnames(foo) = names(mydata)
  rownames(foo) = c("First", "Second", "Third", "Fourth", "Fifth", "Sixth")
  return(foo)
}

template <- "<<thisthing-{{i}}>>=
mytable = mytable_function(iris[iris$Species == unique(iris$Species)[i],])
latex(mytable, file = '',
        title = '',
        where = '!h',
        caption = 'This is a table',
        col.just = rep('r', ncol(mytable)))
@"

 for(i in 1:3){
    cat(knit(text = knit_expand(text = template, i = i, quiet = TRUE)))
 }

@

\end{document}

enter image description here

Fwiw这里是我刚才问过的一个类似的问题,但因为我在这里制作表而不是数字,我认为这是一个稍微不同的解决方案。 Print a list of dynamically-sized plots in knitr

1 个答案:

答案 0 :(得分:1)

提供的代码与您提供的输出不匹配。实际上,它不会产生任何输出。

步骤0:从问题

重现输出
  • include=FALSE关于文档中唯一的块是非常致命的......替换为echo=FALSE
  • 主要块(setup)以及模板块需要results="asis"
  • message=FALSE应该是setup的一个块选项。将其设置为setup中的默认选项不会影响来自当前块的消息。

第1步:立即发布

这一行

cat(knit(text = knit_expand(text = template, i = i, quiet = TRUE)))

应该

cat(knit(text = knit_expand(text = template, i = i), quiet = TRUE))

quietknit的参数,而不是knit_expand

第2步:更好的解决方案

虽然这有效,但这是一个过于复杂的矫枉过正。您链接到动态生成的块的答案,因为fig.height没有按照该情况所需的方式进行矢量化。在这里,我们可以只使用一个块:

\documentclass{article}
\begin{document}

<<setup, echo = FALSE, results='asis', message = FALSE>>=

mytable_function = function(mydata){
  foo = as.matrix(head(mydata))
  colnames(foo) = names(mydata)
  rownames(foo) = c("First", "Second", "Third", "Fourth", "Fifth", "Sixth")
  return(foo)
}

for(i in 1:3){
  mytable = mytable_function(iris[iris$Species == unique(iris$Species)[i],])
  Hmisc::latex(mytable, 
        file = '',
        title = '',
        where = '!h',
        caption = 'This is a table',
        col.just = rep('r', ncol(mytable)))
}

@
\end{document}