Результат цвета строки Knitr xtable во 2-й таблице в ячейке заголовка строки затемнен

Уважаемые пользователи R xtable и knitr: я боролся с этой проблемой уже несколько дней, и я очень удивлен, что кто-то уже не сообщил о подобном случае. Ваше понимание и помощь очень ценятся.

Я использовал xtable для создания двух или более таблиц. Строки в таблицах поочередно окрашены. Первый стол в порядке. Но, начиная со 2-й таблицы (или более), крайняя левая ячейка заголовка всегда затемняется.

к сожалению, это очень воспроизводимо. Я всегда получал точно такой же затемненный заголовок после первого хорошего стола. Вот коды для воспроизведения:

\documentclass{article}
\usepackage{booktabs}
\usepackage{colortbl, xcolor}

\begin{document}
<<echo=TRUE,results='asis'>>=
employee <- c('John Doe','Peter Gynn','Jolie Hope')
salary <- c(21000, 23400, 26800)

mydata <- data.frame(employee, salary)
rws <- seq(1, (nrow(mydata)), by = 2)
col <- rep("\\rowcolor[gray]{0.90}", length(rws))
library(xtable)
print(xtable(mydata, caption="Test"), booktabs = TRUE, 
      include.rownames = FALSE, caption.placement = "top",
      sanitize.colnames.function = identity,
      add.to.row = list(pos = as.list(rws), command=col))

print(xtable(mydata, caption="Test"), booktabs = TRUE, 
      include.rownames = FALSE, caption.placement = "top",
      sanitize.colnames.function = identity,
      add.to.row = list(pos = as.list(rws), command=col))
@

\end{document}

Выход:

вывод xtable

И мой sessionInfo() выглядит следующим образом:

> sessionInfo()
R version 3.0.1 (2013-05-16)
Platform: i386-w64-mingw32/i386 (32-bit)

locale:
[1] LC_COLLATE=English_United States.1252  LC_CTYPE=English_United States.1252    LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C                           LC_TIME=English_United States.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

loaded via a namespace (and not attached):
[1] digest_0.6.3   evaluate_0.4.7 formatR_0.9    knitr_1.4.1    stringr_0.6.2  tools_3.0.1   

1 ответ

Решение

Это легко исправить: просто поменяйте nrow(mydata) в nrow(mydata) - 1и ты больше не увидишь черную клетку.

Основная проблема здесь довольно тонкая: у вас есть 3 строки и seq(1, nrow(mydata), by = 2) дает тебе c(1, 3)тогда вы говорите xtable добавить \rowcolor[gray]{0.90} после первой и третьей строки, которая генерирует таблицу ниже:

\begin{tabular}{lr}
  \toprule
employee & salary \\
  \midrule
John Doe & 21000.00 \\
   \rowcolor[gray]{0.90}Peter Gynn & 23400.00 \\
  Jolie Hope & 26800.00 \\
   \rowcolor[gray]{0.90} \bottomrule  % <-- the problem is here
\end{tabular}

Так что есть дополнительная команда \rowcolor[gray]{0.90} в конце таблицы, которая по какой-то причине имеет побочный эффект для следующей таблицы. Решение состоит в том, что вы не должны добавлять \rowcolor[gray]{0.90} после последней строки, и поэтому вы должны сгенерировать последовательность от 1 до nrow(data) - 1 вместо nrow(data),

Теперь вы должны увидеть ожидаемый результат:

Другие вопросы по тегам