Формирование xtable на основе условия с 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,"}"), и значения выше 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))

Однако кажется, что только последняя строка не выполняется должным образом. Почему?


person user2386786    schedule 26.03.2014    source источник
comment
Привет, Потратьте немного времени и прочтите отрывок из тега перед тем, как добавлять теги. dataframes предназначен для панд, тогда как вам нужно data.frame здесь. В следующий раз будь осторожен. См. Этот мета-пост. Предупредить [r] пользователей от добавления тега [dataframes] вместо тега [data.frame]   -  person Bhargav Rao    schedule 14.03.2016


Ответы (1)


Наконец-то я смог сам решить проблему. Решение, которое сработало для меня, заключалось в использовании вложенной функции 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))

Это сработало :)

person user2386786    schedule 27.03.2014