2017-08-30 6 views
0

次の設定を使用してのリストを作成しています。marrangeGrobの後にggsaveを使用できません

これはかなりうまく機能:

library(grid) 
library(gridExtra) 
library(ggplot2) 

mycols <- c('year','displ') 

mylist <- list() 
for(item in mycols){ 

    p <- ggplot(mpg, aes_string(x = 'hwy', y = item)) + 
    geom_point() 
    mylist[[(length(mylist) +1)]] <- p 
} 

ml = marrangeGrob(grob = mylist, nrow=2, ncol=1) 
ggsave("P://multipage.pdf", ml, width =10, height = 5) 

しかし、ループ内で、置き換える:

  • mylist <- append(mylist, p)

    エラー(*tmp*、 "wrapvp"、値=リスト(x = 0.5、yは、 = 0.5:交換は、17行を有し、データがここでの問題は何234

    を有します?個別に、リスト内のすべてのグラフは上手く見えます。

    ありがとうございます!

  • +0

    ありがとう@MrFlick。私は今更新しています。私は面白いバグを発見した –

    +0

    ええ、それは本当です。私は通常のおもちゃの例で試してみましょう –

    +0

    @MrFlickすばらしい編集あなたは思いませんか? :) –

    答えて

    2

    これは実際にはmarrangeGrobとは関係がありません。これはあなたのリストの作成方法と関係があります。これらのメソッドの出力構造を比較する

    out1 <- list() 
    out1[[length(out1)+1]]<-list(a=1, b=2) 
    out1[[length(out1)+1]]<-list(a=2, b=2) 
    str(out1) 
    # List of 2 
    # $ :List of 2 
    # ..$ a: num 1 
    # ..$ b: num 2 
    # $ :List of 2 
    # ..$ a: num 2 
    # ..$ b: num 2 
    
    out2 <- list() 
    out2 <- append(out2, list(a=1, b=2)) 
    out2 <- append(out2, list(a=2, b=2)) 
    str(out2) 
    # List of 4 
    # $ a: num 1 
    # $ b: num 2 
    # $ a: num 2 
    # $ b: num 2 
    

    これらのメソッドの出力構造が異なることに注意してください。 append()は、リスト内のリストをネストするのではなく、「ルート」リストに要素を追加します。あなたは明示的に自分自身で、余分なlist()

    out3 <- list() 
    out3 <- append(out3, list(list(a=1, b=2))) 
    out3 <- append(out3, list(list(a=2, b=2))) 
    str(out3) 
    # List of 2 
    # $ :List of 2 
    # ..$ a: num 1 
    # ..$ b: num 2 
    # $ :List of 2 
    # ..$ a: num 2 
    # ..$ b: num 2 
    

    が、このようなRのループをいじりはほとんど必要であることを行うことができます。 lapply()またはMap()のような組み込みイテレータを使用する方が良いでしょう。たとえば、

    mylist <- lapply(mycols, function(item) { 
        ggplot(mpg, aes_string(x = 'hwy', y = item)) + 
        geom_point() 
    }) 
    
    +0

    非常にクリアでおもしろい。ありがとう!入れ子になっていないループとネストされていないループ –

    関連する問題