Изменение цвета отрицательных чисел на красный в таблице, сгенерированной с помощью xtable ()?

Я пишу отчет в R с knitr. Я использую xtable() для создания таблиц в отчете. Одна из моих таблиц включает как отрицательные, так и положительные числа. Я бы хотел изменить цвет отрицательных чисел на красный. Как я могу это сделать? Очевидно, что одним из простых решений является изменение кода latex, который генерирует xtable, но обратите внимание, что у меня есть автоматический отчет, что числа могут меняться с новыми наборами данных, и я не хочу вручную устанавливать цвета.

вот простой код:

documentclass{article}
begin{document}
<<simpleExamp, results=tex, echo=FALSE>>=
library(knitr)
library(xtable)
testMatrix <- matrix(c(sample(-10:10,10)), ncol = 2)
xtable(testMatrix)
@
end{document} 

Как я могу сделать отрицательные числа красными? Спасибо за помощь.

2 ответов


можно использовать capture.output() для захвата строк, напечатанных (неявным) вызовом print.xtable(). Тогда примените gsub() к выходу, используя шаблон и замену, которые окружают каждое отрицательное число с \textcolor{red}{}. Наконец, используйте cat() С sep="\n" чтобы записать измененные строки в .

\documentclass{article}
\begin{document}
<<simpleExamp, results="asis", echo=FALSE>>=
library(knitr)
library(xtable)
testMatrix <- matrix(c(sample(-10:10,10)), ncol = 2)
## I added the following three lines
xt <- capture.output(xtable(testMatrix))
xt_mod <- gsub("(\s|^)(-\d*)", "\1\\textcolor{red}{\2}", xt)
cat(xt_mod, sep="\n")
@
\end{document}

(обратите внимание, что Я заменил results=tex С results="asis", который knitr 'предпочитает' и что он будет быстрее процесс.)


Edit: добавление изображения результирующей таблицы. (Получение его в готовом виде потребовало нескольких настроек кода, которые также включены ниже.)

enter image description here

\documentclass{standalone}
\renewenvironment{table}{}{}% Ignore `table` environment in standalone mode.
\begin{document}
<<simpleExamp, results="asis", echo=FALSE>>=
library(knitr)
library(xtable)
cat("\Huge\n\n")
testMatrix <- matrix(c(sample(-10:10,10)), ncol = 2)
## I added the following three lines
xt <- capture.output(print.xtable(xtable(testMatrix), table.placement=NULL))
xt_mod <- gsub("(\s|^)(-\d*)", "\1\\textcolor{red}{\2}", xt)
cat(xt_mod, sep="\n")
@
\end{document}

скопировал ответ Джоша О'Брайена с небольшой настройкой, чтобы покрасить таблицу десятичными знаками:

\documentclass{article}
\begin{document}
<<simpleExamp, results="asis", echo=FALSE>>=
library(knitr)
library(xtable)
testMatrix <- matrix(c(sample(-10:10,10)), ncol = 2)*1.1
## I added the following three lines
xt <- capture.output(xtable(testMatrix))
xt_mod <- gsub("(\s|^)(-\d\.\d*)", "\1\\textcolor{red}{\2}", xt)
cat(xt_mod, sep="\n")
@
\end{document}