我仍然在研究this question。我已经得到它所以它给出了正确的细胞红色背景,但它没有给其他细胞提供绿色背景。
注意:我只使用sweave,而不是knitr。
这是我的代码:
<<>>=
Flag <- data.frame(HOSP,Dept, Overall, DC_Info, Care_Trans)
@
<<results=tex>>=
color_cells <- function(df, var){
out <- ifelse(df[, var]=="",
paste0("\\cellcolor[HTML]{2DB200}{", df[, var], "}"),
paste0("\\cellcolor[HTML]{FF0600}{", df[, var], "}"))
}
Flag$Overall <- color_cells(df = Flag, var= "Overall")
Flag$DC_Info <- color_cells(df = Flag, var= "DC_Info")
Flag$Care_Trans <- color_cells(df = Flag, var= "Care_Trans")
@
<<results=tex>>=
Flagx <- xtable(Flag)
align(Flagx) <- "|c|l|l|c|c|c|"
print(Flagx[1:40,], hline.after=c(-1:40), sanitize.text.function=identity,
sanitize.colnames.function = Hmisc::latexTranslate)
@
答案 0 :(得分:1)
可能有所贡献的一些事情:
这很微妙,我甚至在早期的问题中都错过了它。在color_cells
函数中,您要将字符串分配给out
,但不会返回out
的值。您应该使用以下两种方法之一编写函数:
color_cells <- function(df, var){
ifelse(df[, var]=="",
paste0("\\cellcolor[HTML]{2DB200}{", df[, var], "}"),
paste0("\\cellcolor[HTML]{FF0600}{", df[, var], "}"))
}
OR
color_cells <- function(df, var){
out <- ifelse(df[, var]=="",
paste0("\\cellcolor[HTML]{2DB200}{", df[, var], "}"),
paste0("\\cellcolor[HTML]{FF0600}{", df[, var], "}"))
out
}
可能有所贡献的另一个问题(虽然我在这种情况下并不完全确定)是您的列是否具有任何NA
值。观察如果值为NA
会发生什么:逻辑比较无法解析并返回NA
而不应用任何颜色。
> ifelse(NA == "", "red", "green")
[1] NA
您可以使用类似
的内容修改cell_colors function to handle the
NA`
color_cells <- function(df, var){
df[, var][is.na(df[, var])] <- ""
ifelse(df[, var]=="",
paste0("\\cellcolor[HTML]{2DB200}{", df[, var], "}"),
paste0("\\cellcolor[HTML]{FF0600}{", df[, var], "}"))
}