2

我正在尝试cut使用 knitr 和 xtable 将生成的频率表输出到 PDF 文件。但是,当我包含该选项时include.rownames=FALSE,不会处理输出并报告错误,而代码使用include.rownames=TRUE. 测试代码如下:

\documentclass[12pt]{article}

\begin{document}

<<test_table, results = "asis",echo=FALSE>>=
library(xtable)
x <- sample(10,100,replace=TRUE)
breaks <- c(1,2,5,10)
x.freq <- data.frame(table(cut(x, breaks, right=FALSE)))
print(xtable(x.freq),include.rownames=TRUE)
@

\end{document}

当我使用时,include.rownames=TRUE我得到下面的输出。

1 [1,2) 5
2 [2,5) 35
3 [5,10) 49

而当我使用时include.rownames=FALSE出现错误:

Test.tex:71: LaTeX 错误:输入第 58 行上的 \begin{tabular} 以 \end{document} 结尾。

我相信我收到错误是因为文本源中存在方括号“ [ ”。

有谁知道如何解决这个问题?

4

1 回答 1

5

问题是表中每一行的末尾都是 a \\,它有一个可选参数来指定在下一行之前要留多少空间,例如\\[1in]. \\在和之间允许有空格[,所以在这种情况下,它试图将 读取[2,5)为那个参数。

一个简单的解决方法是更改​​因子的标签以首先包含一些非打印空白字符,但是,如果您这样做,默认情况下print.xtable会“清理”它以便它实际打印,所以您需要通过传递一个新的清理函数来关闭它;identity不会做任何修复。

levels(x.freq$Var1) <- paste0("{}", levels(x.freq$Var1))
print(xtable(x.freq),include.rownames=FALSE, sanitize.text=identity)
于 2013-10-08T13:49:54.517 回答