我不能让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需要起作用吗?
答案 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参数的值是键值对的向量。键是表达式的可能结果。
这就是你得到的: