Eliminación de factores no utilizados por panel en un gráfico de barras con factores anidados

Hace algún tiempo hice una pregunta encómo eliminar los factores no utilizados en un gráfico de barras, y obtuve una solución útil para ese problema, gracias a @Aaron. Ahora, estoy enfrentando un problema muy similar, pero la solución que usé en el pasado no funciona para este caso.

Este es el código para reproducir el marco de datos que estoy usando:

set.seed(17)
df <- data.frame(BENCH = sprintf('bench-%s', sort(rep(letters[1:8], 4))),
                 CLASS.CFG = sprintf('class-%s',
                     c(rep('C', 4), rep('A', 4), rep('B', 8),
                       rep('C', 8), rep('A', 4), rep('D', 4))),
                 EXEC.CFG = rep(c('st', 'st', 'dyn', 'dyn'), 8),
                 METRIC = rep(c('ipc', 'pwr'), 16),
                 VALUE = runif(32))

El comando directo para trazar este marco de datos sería:

library(lattice)
barchart(VALUE ~ BENCH | EXEC.CFG + CLASS.CFG, df, groups = METRIC,
         scales = list(x = list(rot = 45, relation = 'free')),
         auto.key = list(columns = 2))

Como puede ver, estoy trazando VALOR para cada BANCO restringido a cada combinación posible de EXEC.CFG y CLASS.CFG (eso es lo que quiero decir con factores anidados), y uso METRIC para crear grupos.

Este es el resultado que obtengo:

Incluso si uso escalas "libres" para el eje X, en la gráfica hay algunos espacios (innecesarios) entre algunas de las barras (por ejemplo, entrebench-b ybench-g).

Intenté aplicar la solución que obtuve para mi pregunta anterior de la siguiente manera:

pl1 <- barchart(VALUE ~ BENCH | EXEC.CFG + CLASS.CFG,
    subset(df, CLASS.CFG == 'class-A'), groups = METRIC,
    auto.key = list(columns = 2))
pl2 <- barchart(VALUE ~ BENCH | EXEC.CFG + CLASS.CFG,
    subset(df, CLASS.CFG == 'class-B'), groups = METRIC)
pl3 <- barchart(VALUE ~ BENCH | EXEC.CFG + CLASS.CFG,
    subset(df, CLASS.CFG == 'class-C'), groups = METRIC)
pl4 <- barchart(VALUE ~ BENCH | EXEC.CFG + CLASS.CFG,
    subset(df, CLASS.CFG == 'class-D'), groups = METRIC)

pls <- c(pl1, pl2, pl3, pl4)
pls <- update(pls, scales = list(y = 'same'))
pls

Y este es el resultado que obtengo:

Como te darás cuenta, esta trama no es correcta. No respeta los factores anidados, mezclando valores de CLASS.CFG y EXEC.CFG en los títulos del panel.

He estado luchando con esto por un tiempo, pero sin éxito. ¿Alguien sabe cómo se puede lograr esto? (Básicamente, lo que estoy tratando de obtener es un gráfico como el primero, pero sin los espacios entre las barras).

Respuestas a la pregunta(1)

Su respuesta a la pregunta