An embedded and charset-unspecified text was scrubbed... Name: not available URL: <https://stat.ethz.ch/pipermail/r-help/attachments/20110601/d6f4887b/attachment.pl>
xtable with conditional formatting using \textcolor
3 messages · Walmes Zeviani, Marc Schwartz
On Jun 1, 2011, at 1:33 PM, Walmes Zeviani wrote:
Hello list,
I'm doing a table with scores and I want include colors to represent status
of an individual. I'm using sweave <<results=tex>>= and xtable but I can't
get a result I want. My attemps are
#-----------------------------------------------------------------------------
# code R
da <- data.frame(id=letters[1:5], score=1:5*2)
col <- function(x){
ifelse(x>7,
paste("\textcolor{blue}{", formatC(x, dig=2, format="f"), "}"),
paste("\textcolor{red}{", formatC(x, dig=2, format="f"), "}"))
}
da$score.string <- col(da$score)
require(xtable)
xtable(da[,c("id","score.string")])
#-----------------------------------------------------------------------------
actual result
#-----------------------------------------------------------------------------
\begin{tabular}{rll}
\hline
& id & score.string \\
\hline
1 & a & extcolor\{red\}\{ 2.00 \} \\
2 & b & extcolor\{red\}\{ 4.00 \} \\
3 & c & extcolor\{red\}\{ 6.00 \} \\
4 & d & extcolor\{blue\}\{ 8.00 \} \\
5 & e & extcolor\{blue\}\{ 10.00 \} \\
\hline
\end{tabular}
#-----------------------------------------------------------------------------
desired result (lines omited to save space)
#-----------------------------------------------------------------------------
1 & a & \textcolor{red}{ 2.00 } \\
2 & b & \textcolor{red}{ 4.00} \\
#-----------------------------------------------------------------------------
Any contribution will be useful. Thanks.
Walmes.
When the '\t' is being cat()'d to the TeX file (or console) by print.xtable(), it is being interpreted as a tab character. You need to escape it with additional backslashes and then adjust the sanitize.text.function in print.xtable() so that it does not touch the backslashes:
da <- data.frame(id=letters[1:5], score=1:5*2)
col <- function(x){
ifelse(x>7,
paste("\\textcolor{blue}{", formatC(x, dig=2, format="f"), "}"),
paste("\\textcolor{red}{", formatC(x, dig=2, format="f"), "}"))
}
da$score.string <- col(da$score)
da
id score score.string
1 a 2 \\textcolor{red}{ 2.00 }
2 b 4 \\textcolor{red}{ 4.00 }
3 c 6 \\textcolor{red}{ 6.00 }
4 d 8 \\textcolor{blue}{ 8.00 }
5 e 10 \\textcolor{blue}{ 10.00 }
require(xtable)
print(xtable(da[,c("id","score.string")]), sanitize.text.function = function(x){x})
That will give you:
% latex table generated in R 2.13.0 by xtable 1.5-6 package
% Wed Jun 1 13:44:54 2011
\begin{table}[ht]
\begin{center}
\begin{tabular}{rll}
\hline
& id & score.string \\
\hline
1 & a & \textcolor{red}{ 2.00 } \\
2 & b & \textcolor{red}{ 4.00 } \\
3 & c & \textcolor{red}{ 6.00 } \\
4 & d & \textcolor{blue}{ 8.00 } \\
5 & e & \textcolor{blue}{ 10.00 } \\
\hline
\end{tabular}
\end{center}
\end{table}
HTH,
Marc Schwartz
An embedded and charset-unspecified text was scrubbed... Name: not available URL: <https://stat.ethz.ch/pipermail/r-help/attachments/20110601/39b50ce5/attachment.pl>