颜色编码摆动仅部分起作用

Color Coding Sweave Only Partially Working

我仍在努力 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)
@

一些可能有所贡献的事情:

这很微妙,我什至在前面的问题中也没有注意到。在您的 color_cells 函数中,您将一个字符串分配给 out,但您没有返回 out 的值。您应该使用以下两种方式之一编写您的函数:

color_cells <- function(df, var){
  ifelse(df[, var]=="", 
         paste0("\cellcolor[HTML]{2DB200}{", df[, var], "}"),
         paste0("\cellcolor[HTML]{FF0600}{", df[, var], "}"))
}

color_cells <- function(df, var){
  out <- ifelse(df[, var]=="", 
                paste0("\cellcolor[HTML]{2DB200}{", df[, var], "}"),
                paste0("\cellcolor[HTML]{FF0600}{", df[, var], "}"))
  out
}

另一个可能有影响的问题(尽管在这种情况下我不完全确定)是您的列是否有任何 NA 值。观察如果值是 NA 会发生什么:逻辑比较没有解决并且 returns NA 没有应用任何颜色。

> ifelse(NA == "", "red", "green")
[1] NA

您可以用

之类的东西修改您的 cell_colors function to handle theNA`
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], "}"))
}