代码之家  ›  专栏  ›  技术社区  ›  Amanda R.

仅部分工作的颜色编码凹痕

  •  0
  • Amanda R.  · 技术社区  · 10 年前

    我还在努力 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 回复  |  直到 9 年前
        1
  •  1
  •   Benjamin    10 年前

    可能有以下几点贡献:

    这很微妙,我甚至在前面的问题中也没有提到。在您的 color_cells 函数,则将字符串分配给 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 价值观观察如果值为 不适用 :逻辑比较无法解析并返回 不适用 没有应用任何颜色。

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