如何将换行符放入R中xtable的列标题中

时间:2010-04-21 20:28:58

标签: r latex tex sweave xtable

我有一个使用xtable放入sweave文档的数据框,但我的一个列名很长,我想将它分成两行以节省空间

calqc_table<-structure(list(RUNID = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L), ANALYTEINDEX = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L), ID = structure(1:11, .Label = c("Cal A", "Cal B", "Cal C", 
"Cal D", "Cal E", "Cal F", "Cal G", "Cal H", "Cal High", "Cal Low", 
"Cal Mid"), class = "factor"), mean_conc = c(200.619459644855, 
158.264703128903, 102.469121407733, 50.3551544728544, 9.88296440865076, 
4.41727762501703, 2.53494715706024, 1.00602831741361, 199.065054555735, 
2.48063347296935, 50.1499780776199), sd_conc = c(2.3275711264554, 
NA, NA, NA, NA, NA, NA, 0.101636943231162, 0, 0, 0), nrow = c(3, 
1, 1, 1, 1, 1, 1, 3, 2, 2, 2)), .Names = c("Identifier of the Run within the Study", "ANALYTEINDEX", 
"ID", "mean_conc", "sd_conc", "nrow"), row.names = c(NA, -11L
), class = "data.frame")
calqc_xtable<-xtable(calqc_table)

我尝试在名称中添加换行符,但这似乎不起作用

names(calqc_table)[1]<-"Identifier of the \nRun within the Study"

有办法做到这一点吗?我见过有人建议使用hmisc包中的latex函数来手动遍历表并手动将其写在latex中,包括换行符,但这看起来有点像faf!

2 个答案:

答案 0 :(得分:26)

我发现这样做的最好方法是将表格列指定为“固定宽度”列,以便其中的文本换行。使用xtable包,可以通过以下方式完成:

align( calqc_xtable ) <- c( 'l', 'p{1.5in}', rep('c',5) )

xtable要求您为选项“rownames”列提供对齐 - 这是最初的l规范。部分规范p{1.5in}用于您的第一个列标题,这很长。这将其限制为1.5英寸宽的盒子,如有必要,标题将包裹在多行上。其余五列使用c说明符设置为居中。

p{1.5in}这样的固定宽度列的一个主要问题是他们使用对齐的对齐方式设置文本。这会导致每行中的字间距扩大,使得该行将填满分配的整个1.5英寸。

坦率地说,在大多数情况下,这会产生我无法使用礼貌语言描述的结果(我是业余排版坚果,这种行为导致面部蜱虫)。

修复方法是通过在列规范中添加>{}字段来提供乳胶对齐命令:

align( calqc_xtable ) <- c( 'l', '>{\\centering}p{1.5in}', rep('c',4) )

其他有用的对齐命令是:

  • \ raggedright - &gt;导致文本左对齐
  • \ raggedleft - &gt;导致文本右对齐

请记住加倍反斜杠以在R字符串中转义它们。您可能还需要禁用xtable默认使用的字符串卫生功能。

注意

如果在表的最后一列使用将失败,除非表行以\tabularnewline而不是\\结束,我认为不是xtable的情况,并且不容易通过任何用户可设置的选项进行自定义。

另一件需要考虑的事情是,您可能不希望整个列线包裹到1.5英寸并居中 - 只是标题。在这种情况下,请禁用xtable字符串清理,并使用宽度为1的\multicolumn单元格设置标头:

names(calqc_table)[1]<-"\\multicolumn{1}{>{\\centering}p{1.5in}}{Identifier of the Run within the Study}"

答案 1 :(得分:2)

@Sharpie的技术对我不起作用,因为pandoc在转换为pdf时失败并出现错误43。因此,这就是我所做的:

移动了\\centering标记:

names(calqc_table)=c(rep("\\multicolumn{1}{p{0.75in}}{\\centering Identifier of the Run within the Study}", 6))

(此处适用于表格的所有6列)

和xtable打印中禁用的清理:

print(calqc_table, sanitize.colnames.function=function(x){x})