2017-11-04 7 views
0

Ich habe einen Datensatz namens panel, die mehrere kategorische Variablen in Interesse hat.übergeben Variable an ggmosaic

Ich möchte ein Programm schreiben, das ein Mosaikplot für jedes Paar unter Verwendung einer for-Schleife plotten wird.
vars ist der Vektor mit den folgenden Namen der Spalten:

vars 
[1] "region" "urb"  "sex"  "race" "grade" "dt01" "dt02"  "dt03"  
[9] "dt06"  "dt07"  "exercise" "kq7" 

Das ist mein Programm:

library(ggmosaic) 

for (i in 1:12){ 
    for (j in 1:12){ 
    a <- vars[i] 
    b <- vars[j] 
    if (j > i){ 
     m <- ggplot(data = panel) 
     m <- m + geom_mosaic(aes(x = product(a), fill = b)) 
    } 
    print(m) 
    } 
} 

Dieser Code gibt mir ein Grundstück mit einem großen Brocken.

plot

Wenn ich die Spaltennamen manuell wie im folgenden Code schreiben funktioniert es

ggplot(data = panel) + 
    geom_mosaic(aes(x = product(region), fill = urb)) 

ich versucht aes_string aber es half nicht.

Antwort

1

Zwei Vorschläge zur Berücksichtigung.

1: Erzeugen Sie Ihre Paare & Verwenden Sie eine einzelne Schleife, um durch sie zu gehen, anstatt eine doppelte Schleife, die wiederholte Kombinationen durchläuft.

vars <- c("region", "urb", "sex", "race", "grade", "dt01",  
      "dt02", "dt03", "dt06", "dt07", "exercise", "kq7") 
vars.pair <- combn(vars, 2, simplify = FALSE) # list of all valid pairs 

> head(vars.pair) 
[[1]] 
[1] "region" "urb" 

[[2]] 
[1] "region" "sex" 

[[3]] 
[1] "region" "race" 

[[4]] 
[1] "region" "grade" 

[[5]] 
[1] "region" "dt01" 

[[6]] 
[1] "region" "dt02" 

2: In aes_string(), stellen Sie sicher, wertet ästhetische Abbildung des x zu "product(variable.name)" statt product("variable.name").

for(i in seq_along(vars.pair)){ 

    p1 <- vars.pair[[i]][1] 
    p2 <- vars.pair[[i]][2] 

    m <- ggplot(data = panel) + 
    geom_mosaic(aes_string(x = paste0("product(", p1, ")"), 
          fill = p2)) 
    print(m) 

}