2014-03-26 72 views
0

我想为使用xtable创建的Latex表中的单元格着色。 我看起来像一个数据帧:基于lapply的条件格式化xtable

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,"}")之间occure,价值观和绿色(\\cellcolor{green}{",x,"}")

高于80值什么是错的在我的功能?我也注意到,如果我会为每一个单独的颜色我碰到一个警告提示创建一个函数:

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

嗨,需要一些时间和阅读在标记之前标记摘录。 [tag:dataframes]是熊猫,而你需要[tag:data.frame]在这里。下次再小心点。看到这篇文章。 [警告\ [r \]用户添加\ [dataframes \]标记而不是\ [data.frame \]标记](http://meta.stackoverflow.com/q/318933) –

回答

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)) 

那做的工作:)