2017-01-26 11 views
2

私はループの中で作業しています。リストにプロットを保存したいので、それらを一緒に.pdfでプロットすることができます。問題は、リストが正しく埋められておらず、前回の実行結果で再更新されることです。ですから、最終的に私が得るのはまったく同じ5つの要素のリストです。ループの中でプロットをリストに格納する方法は?

私はループが役に立たないように思えるかもしれませんが、実際のコードにできる限り近いテストコード(再現性のあるエラーで)を作成させるだけです。だから、私はループをそのまま残す必要があります。

library (ggplot) 
library (gridExtra) 

plist <- list() 

for (z in 1:5){ 
    n <- 100 
    k <- seq(0, to=4500+z*2000, length=n) 
    tmp <- numeric(n) 
    for (i in 1:n){ 
    tmp[i] <- (5*(i*3)^2)} 

    plist[[z]] <- ggplot() + 
    geom_line(aes(x = k, y = tmp)) + 
    theme_bw() 

    pdf(sprintf("p%s.pdf", z), 
     width = 6, height = 4, onefile = T) 
    plot(plist[[z]]) 
    dev.off() 
} 

do.call(grid.arrange, c(plist, ncol = 5)) 
+1

あなたのforループでは、 'P [z]は'使用することはできますか? –

+3

はい、プロットをリストに保存してみませんか?その後、一緒にプロットするためにリストに入れる必要はありません。 – aosmith

+0

あなたがsprintf( "p%s"、z)に割り当てている場所では、「get」しようとするときに "p_%s"を使用します。 –

答えて

1

この回答はに基づいています:Storing plot objects in a list

library(ggplot2) 
library(gridExtra) 

plist <- list() 

for (z in 1:5){ 
    n <- 100 
    k <- seq(0, to=4500+z*2000, length=n) 
    tmp <- numeric(n) 
    for (i in 1:n){ 
    tmp[i] <- (5*(i*3)^2)} 

    data <- data.frame(n, k, tmp) 

    plist[[z]] <- ggplot(data = data) + #data needs to be given!! 
    geom_line(aes(x = k, y = tmp)) + 
    theme_bw() 

    pdf(sprintf("p%s.pdf", z), 
     width = 6, height = 4, onefile = T) 
    plot(plist[[z]]) 
    dev.off() 
} 

do.call(grid.arrange, c(plist, ncol = 5)) 

enter image description here

関連する問題