2014-03-26 73 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)) 

那做的工作:)