Gestern habe ich R auf Version 3.0.0 und ggplot2 auf Version 0.9.3.1 aktualisiert (und ein paar kleinere Änderungen an meinem Skript vorgenommen). Jetzt bekomme ich Fehler beim Versuch, Diagramme zu speichern - leider wird der Fehler nicht mit einem kleineren Datenrahmen reproduziert, also habe ich Code eingefügt, um einen der gleichen Größe zu generieren.Plots in R innerhalb einer Schleife speichern
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)
}
}
Auf dieses Skript ausgeführt wird, erhalte ich folgende Fehlermeldung:
Fehler in UseMethod („Tiefen“): keine anwendbare Methode für ‚Tiefen‘ auf ein Objekt der Klasse „NULL angewandt "
Allerdings, wenn ich das Skript Zeile für Zeile ausführen, läuft alles in Ordnung (Bild unten). Nun, wenn ich die for-Schleife und verwenden dev.copy und ggsave statt dev.print wie unten
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")
}
}
Bei dem Versuch zu öffnen „MyGGPlot.png“ mit Paint ändern, erhalte ich eine Fehlermeldung, die besagt
A sharing violation occurred while accessing <filename>
Ich führe das Skript mit RStudio Version 0.97.449. Irgendwelche Ideen, was ich ändern muss, um aktuelle Plots zu speichern?
Versuchen Sie innerhalb einer Schleife, ein Gerät zu öffnen (z. 'png()'), und geben Sie vor dem Plot einen eindeutigen Dateinamen an. Schließen Sie das Gerät am Ende der Schleife mit 'dev.off()'. –