2017-06-28 5 views
0

Pour obtenir une liste qui ont 2 objets ggplot, ma fonction gscatFn2 comme ci-dessous. Au lieu d'utiliser le nom de la colonne « Semaine » de la trame de données, je veux utiliser l'index de la colonne 7 pour la cartographie esthétique comme ci-dessous. Mais message d'erreur:aes_string couleur asthetic

Error in sort.list(y) : 'x' must be atomic for 'sort.list'Have you called 'sort' on a list? 

Il doit y avoir somthing mal avec ma couleur cartographie esthétique que je ne pouvais pas comprendre.

df1 <- data.frame(list(Avg=c(0.282,0.282,0.282,0.733),CV=c(0.7,1.06,0.7,0.9),Lot=c("a","b","c","d"),Model=c("m1","m2","m3","m4"),Size=c("01","02","03","04"),Month=c("11","11","22","22"),Week=c("23","23","24","24"))) 
df2 <- data.frame(list(Avg=c(0.010,0.02,0.029,0.083),CV=c(0.04,0.9,0.4,0.1),Lot=c("a","b","c","d"),Model=c("m1","m2","m3","m4"),Size=c("01","02","03","04"),Month=c("11","11","22","22"),Week=c("23","23","24","24"))) 

grp2 <- list(df1, df2) 

gscatFn2 <- function(grp, ccc, ccv, cca, cccol) { 
#grp: 2 data frame, ccc: Size, ccv : CV, cca : Avg, cccol : Week 
#ggpplot object for each data frame shall return 
library(ggplot2) 
p <- list() 
for (i in (1:length(grp))) { 
#for each data frame repeat 
    #x and y 
    p1 <- ggplot(grp[[i]], aes_string(x=colnames(grp[[i]])[cca],y=colnames(grp[[i]])[ccv])) 
    #color 
    p2 <- p1 + geom_point(aes_string(color= colnames(factor(grp[[i]])[cccol]) )) + scale_color_manual(values= c("deepskyblue3","firebrick")) 
    #accumulate 
    p[[i]] <- p2 
} 
return(p) 
} 

# for testing 
pp <- gscatFn2(grp2,5,2,1,7) # <<<- I got error "Error in sort.list(y) : 'x' must be atomic..." 
print(pp[[1]]) 

Répondre

0

En dehors de la façon bizarre de construire le graphe, dont je ne parlerai peut avoir toutes -you les bonnes raisons de le faire that-, le seul problème que je vois est l'utilisation de

colnames(factor(grp[[i]])[cccol]))) 

Changer à

colnames(grp[[i]])[cccol])) 

permet de résoudre la question:

enter image description here

+0

Il fonctionne. Merci beaucoup. La chose mystérieuse est que sans ** factorisation ** le colmun, la mise en correspondance des couleurs de descrete peut être possible? – Soon

+1

bien, oui, comme le montre l'image. Si vous êtes vraiment préoccupé qu'une variable continue peut glisser, vous pouvez utiliser 'color = paste0 ('facteur (', colnames (grp [[i]]) [cccol], ')')' – GGamba