Как поместить новую строку в заголовок столбца в xtable в R

У меня есть кадр данных, который я помещаю в sweave документ, использующий xtable, однако одно из моих имен столбцов довольно долго, и я хотел бы повредить его более чем две строки для оставления свободного места

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 пакета, чтобы вручную выполнить итерации по таблице и выписать его в латексе вручную, включая новую строку, но это походит на что-то вроде faf!

17
задан Sharpie 23 April 2010 в 15:35
поделиться

1 ответ

Наилучший способ, который я нашел для этого, - это указать столбец таблицы как столбец «фиксированной ширины», чтобы текст внутри него переносился. В пакете xtable это можно сделать с помощью:

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

xtable требует, чтобы вы предоставили выравнивание для столбца option «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 -> заставляет текст быть с выравниванием по левому краю
  • \ raggedleft -> заставляет текст быть с выравниванием по правому краю

Не забудьте двойную обратную косую черту, чтобы избежать их в R-строках. Вам также может потребоваться отключить функцию очистки строк, которую xtable использует по умолчанию.

Примечание

Этот метод выравнивания не сработает , если он используется в последнем столбце таблицы , если строки таблицы не заканчиваются \ tabularnewline вместо \\ , что, как мне кажется, не относится к xtable , и его нелегко настроить с помощью каких-либо настраиваемых пользователем параметров.

Еще одна вещь, которую следует учитывать, - это то, что вы можете не захотеть, чтобы вся строка столбца была перенесена на 1,5 дюйма и центрирована - только заголовок. В этом случае отключите очистку строки xtable и установите заголовок, используя ячейку \ multicolumn шириной 1:

names(calqc_table)[1]<-"\\multicolumn{1}{>{\\centering}p{1.5in}}{Identifier of the Run within the Study}"
26
ответ дан 30 November 2019 в 12:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: