2017-11-04 11 views
0

私はpanelと呼ばれるデータセットを持っています。このデータセットには複数のカテゴリ変数があります。変数をggmosaicに渡す

forループを使用して、すべてのペアのモザイクプロットをプロットするプログラムを作成したいと思います。
vars列の次の名前のベクトルである:

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

は、これが私のプログラムです:

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) 
    } 
} 

このコードは私に一つの大きな塊とのプロットを与えます。

plot

次のコードでは、それは

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

の作品のように、私は手動で列名を書くとき、私はaes_stringをしようとしますが、それは助けにはなりませんでした。

答えて

1

考慮すべき2つの提案。

1:ペアを生成します。&繰り返しの組み合わせを経由するダブルループではなく、1つのループを使用します。

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:aes_string()で、美的マッピングが"product(variable.name)"ではなくproduct("variable.name")に評価のxのことを確認してください。

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) 

}