昨日私はRをバージョン3.0.0に、ggplot2をバージョン0.9.3.1にアップグレードしました(私のスクリプトに少し変更を加えました)。私はプロットを保存しようとするとエラーが発生します。残念ながら、エラーは小さなデータフレームでは再現されないため、同じサイズのコードを生成するコードを追加しました。 UseMethod(「深さ」)でループ内でRにプロットを保存する
エラー:
library("ggplot2") # Create data frame # Time interval ID (x) bin.ts.avg <- as.data.frame(rep(1:18, 31)) names(bin.ts.avg) <- "x" # Time (sequence of 10 minuter intervals between 7am and 10am) tt.month.bins <- seq(from=as.POSIXct("2012-01-01 GMT"), to=as.POSIXct("2012-01-01 GMT") + 60*60*24*31, by="10 mins") tt.month.bins <- tt.month.bins[-length(tt.month.bins)] temp <- as.numeric(format(tt.month.bins, "%H")) ind <- which(temp >=7 & temp <= 9) tt.month.bins <- tt.month.bins[ind] bin.ts.avg$dep <- tt.month.bins # Value (with some NA) bin.ts.avg$tt <- runif(558, min=2.5, max=5) bin.ts.avg$tt[trunc(runif(200, min=1, max=558))] <- NA # Day bin.ts.avg$depday <- rep(1:31, each=18) for (i in 1:2){ if (1){ hist(rnorm(100)) dev.print(file="MyHist.png",device=png, bg="white", width=640, height=352) p <- ggplot(bin.ts.avg, aes(x, tt)) + geom_point() +geom_line() + facet_grid(.~depday) p <- p + ggtitle("10 minute averages")+ xlab("Hour") + ylab("Values") p <- p + scale_x_continuous(breaks=c(min(bin.ts.avg$x), max(bin.ts.avg$x)), labels=c("7", "10")) print(p) dev.print(file="MyGGPlot.png",device=png, bg="white", width=640, height=352) } }
は、このスクリプトを実行するには、私は、次のエラーメッセージを表示しない該当メソッドをクラス「NULLのオブジェクトに適用される「深さ」 ため"
ただし、スクリプトを1行ずつ実行すると、すべてが正常に実行されます(下の図を参照)。私は、forループを変更するとdev.copyを使用してペイントを使用して「MyGGPlot.png」を開こうとするには
for (i in 1:2){
if (1){
hist(rnorm(100))
dev.copy(file="MyHist.png",device=png, bg="white", width=640, height=352)
dev.off()
p <- ggplot(bin.ts.avg, aes(x, tt)) + geom_point() +geom_line() + facet_grid(.~depday)
p <- p + ggtitle("10 minute averages")+ xlab("Hour") + ylab("Values")
p <- p + scale_x_continuous(breaks=c(min(bin.ts.avg$x), max(bin.ts.avg$x)), labels=c("7", "10"))
print(p)
ggsave(filename="MyGGPlot.png")
}
}
以下のようdev.printの代わりにggsave場合は今、私は
を示すエラーメッセージが表示さA sharing violation occurred while accessing <filename>
RStudioバージョン0.97.449を使用してスクリプトを実行します。 現在のプロットを保存するために変更する必要があるアイデアはありますか?
各ループ内で、デバイス(例: 'png()')、あなたのプロットの前に一意のファイル名を与えます。次に、ループの終わりにデバイスを 'dev.off()'で閉じます。 –