颜色编码Sweave只能部分工作

时间:2016-06-01 19:54:16

标签: r latex sweave

我仍然在研究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)
@

1 个答案:

答案 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], "}"))
}