我想在使用xtable
创建的Latex表中为单元格着色。
我有一个看起来像这样的数据框:
a <- data.frame(a=c(seq(1:100)),b=c(seq(1:100)),b=c(seq(1:100)))
现在我希望每个单元格根据其值单独着色。我创建了以下函数来实现这一目标:
formatting<-function(x){ifelse(x<50,paste("\\cellcolor{red}{",x,"}"),x)
ifelse(x>=50&x<=80,paste("\\cellcolor{yellow}{",x,"}"),x)
ifelse(x>=80,paste("\\cellcolor{green}{",x,"}"),x)
}
但是,在我的函数中对此数据框应用lapply
仅执行函数的最后一行(绿色着色)
a <- data.frame(lapply(a, FUN=formatting))
基本上我希望值<50以红色显示\\cellcolor{red}{",x,"}")
,黄色显示50-80之间的值\\cellcolor{yellow}{",x,"}")
,绿色显示值80以上(\\cellcolor{green}{",x,"}")
我的功能有什么问题?我还注意到,如果我单独为每种颜色创建一个函数,我会发出警告说:
red<-function(x){ifelse(x<50,paste("\\cellcolor{red}{",x,"}"),x)}
yellow<-function(x){ifelse(x>=50&x<=80,paste("\\cellcolor{yellow}{",x,"}"),x)}
green<-function(x){ifelse(x>=80,paste("\\cellcolor{green}{",x,"}"),x)}
a <- data.frame(lapply(a, FUN=red))
a <- data.frame(lapply(a, FUN=yellow))
a <- data.frame(lapply(a, FUN=green))
Warning message:
1: In Ops.factor(x, 50) : >= not meaningful for factors
任何人都可以帮我吗?
我用以下代码玩了一下:
resistant<-function(x){ifelse((x>=0&x<50),paste("\\cellcolor{red}{",x,"}"),x)}
intermediate<-function(x){ifelse((x>=50&x<80),paste("\\cellcolor{yellow}{",x,"}"),x)}
susceptible<-function(x){ifelse((x>=80&x<=100),paste("\\cellcolor{green}{",x,"}"),x)}
a<-as.data.frame(apply(a,2, FUN=resistant))
a<-as.data.frame(apply(a,2, FUN=intermediate))
a<-as.data.frame(apply(a,2, FUN=susceptible))
但是,似乎只有最后一行没有正确执行。为什么呢?
答案 0 :(得分:2)
我终于能够自己解决问题了。对我有用的解决方案是使用嵌套的ifelse
函数:
func<-function(x){ifelse(x<50,paste("\\cellcolor{red}{",x,"}"),
ifelse(x>=50&x<80,paste("\\cellcolor{yellow}{",x,"}"),paste("\\cellcolor{green}{",x,"}")))}
并申请:
a<-as.data.frame(apply(a,2, FUN=func))
完成了这项工作:)