[R] xtable with conditional formatting using \textcolor

Brian Diggs diggsb at ohsu.edu
Tue Sep 6 21:18:06 CEST 2011


On 9/6/2011 4:01 AM, eldor ado wrote:
> I have a related question:
>
> dataframe df contains values like
>
>> df
>   .. "\\textbf{ 0.644 }" ..
>
> and the line
>
>> print( xtable(df  , sanitize.text.function = function(x){x}))

sanitize.text.function is an argument of print.xtable, not xtable.  Try

print( xtable(df)  , sanitize.text.function = function(x){x})

or even shorter

print( xtable(df)  , sanitize.text.function = identity)

>
> converts them to
>
>   ..&  $\backslash$textbf\{ 0.644 \}&  ..
>   escaping both double backslashes and brackes.
>
> maybe somebody here knows how to prevent xtable from escaping the code?
>
> best regards,
> lukas kohl
>
> On Wed, Jun 1, 2011 at 8:47 PM, Marc Schwartz<marc_schwartz at me.com>  wrote:
>> 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
>>
>> ______________________________________________
>> R-help at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-help
>> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
>> and provide commented, minimal, self-contained, reproducible code.
>>
>


-- 
Brian S. Diggs, PhD
Senior Research Associate, Department of Surgery
Oregon Health & Science University



More information about the R-help mailing list