如何在rmarkdown pdf输出中为单元格着色

时间:2017-07-25 19:23:51

标签: r knitr r-markdown

我不能让cellcolor在rmarkdown中工作:

---
header-includes:
   -  \usepackage{colortbl} 
   -  \usepackage{color} 

output:
    pdf_document
---

```{r, results="asis"}

library(xtable)
# Your data
tab = data.frame(category = c("A","B","C"), groupA = c(.2,.3,.5), groupB= c(.6,.7,.9))

# Function to cut your data, and assign colour to each range
f <- function(x) cut(x, c(0, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, Inf), 
                      labels=c("green", "red", "blue", "orange", "yellow", "purple", "brown", "white"),
                      include.lowest = FALSE, right = TRUE)

# Apply function to columns: this overwrites your data
tab[c("groupA", "groupB")] <- lapply(tab[c("groupA", "groupB")], function(x)
                                            paste0("\\cellcolor{", f(x), "}", x))
# Sanitise output 
print(xtable(tab), sanitize.text.function = identity)
```

我一直收到这个错误:

! Undefined control sequence.
l.155 1 & A & \cellcolor

任何想法cellcolor需要起作用吗?

1 个答案:

答案 0 :(得分:4)

更新

当包含\usepackage[dvipsnames]{xcolor}时,OP的示例适用于我。另一种方法见下文。

替代方法

这是使用非常方便的condformat包的另一种方法。这样您就不必手动包含任何TeX包,也不必担心逃避特殊字符等。

我们基本上创建一个condformat_tbl对象,并为每列添加两个格式规则。

---
output:
    pdf_document
---

```{r, include = F}
library(condformat)
cols        <- c('green', 'red', 'blue', 'orange', 
                 'yellow', 'purple', 'brown', 'white')
names(cols) <- cols # important for the colours arg in rule_fill_discrete
                    # since it matches the result of 'expression' with the names of the 'colours' vector

f   <- function(x) cut(x, c(0, seq(.2, .8, .1), Inf), labels = cols,
                       include.lowest = FALSE, right = TRUE)
tab <- data.frame(category = c('A', 'B', 'C'), 
                  groupA = c(.2, .3, .5), 
                  groupB = c(.6, .7, .9))
```


```{r, results = 'asis', echo = F}
condformat(tab) + 
  rule_fill_discrete(groupA, expression = f(groupA), colours = cols) +
  rule_fill_discrete(groupB, expression = f(groupB), colours = cols) 
```

注意,rule_fill_discrete中colors参数的值是键值对的向量。键是表达式的可能结果。

这就是你得到的:

enter image description here