J'ai fait différentes parcelles (plus d'une centaine) pour un projet et je ne les ai pas capturées en cours de route (oui c'est mauvais, je sais). Maintenant, je dois les enregistrer tous en même temps mais sans relancer mon script (ce qui prend des heures). Existe-t-il un moyen de le faire dans Rstudio?
Edit: Tous les intrigues sont déjà là et je ne veux pas les réexécuter.
Dans RStudio, chaque session possède un répertoire temporaire qui peut être obtenu à l'aide de tempdir()
. Dans ce répertoire temporaire, il y a un autre répertoire qui commence toujours par "rs-graphics"
et contient tous les tracés enregistrés sous ".png"
des dossiers. Par conséquent, pour obtenir la liste des ".png"
fichiers, vous pouvez effectuer les opérations suivantes:
plots.dir.path <- list.files(tempdir(), pattern="rs-graphics", full.names = TRUE);
plots.png.paths <- list.files(plots.dir.path, pattern=".png", full.names = TRUE)
Maintenant, vous pouvez copier ces fichiers dans le répertoire souhaité, comme suit:
file.copy(from=plots.png.paths, to="path_to_your_dir")
Fonctionnalité supplémentaire:
Comme vous le remarquerez, le .png
les noms de fichiers sont générés automatiquement (par exemple, 0078cb77-02f2-4a16-bf02-0c5c6d8cc8d8.png
). Donc, si vous voulez numéroter le .png
fichiers selon leur ordre de traçage dans RStudio, vous pouvez le faire comme suit:
plots.png.detials <- file.info(plots.png.paths)
plots.png.detials <- plots.png.detials[order(plots.png.detials$mtime),]
sorted.png.names <- gsub(plots.dir.path, "path_to_your_dir", row.names(plots.png.detials), fixed=TRUE)
numbered.png.names <- paste0("path_to_your_dir/", 1:length(sorted.png.names), ".png")
# Rename all the .png files as: 1.png, 2.png, 3.png, and so on.
file.rename(from=sorted.png.names, to=numbered.png.names)
J'espère que ça aide.
Bien que cette discussion soit inactive depuis un certain temps, il y a certaines personnes, comme moi, qui rencontrent toujours le même problème, et les autres solutions ne semblent même pas vraiment comprendre la vraie question.
Alors, mains sur. L'historique de votre tracé est enregistré dans une variable appelée .SavedPlots
. Vous pouvez soit y accéder directement, l'affecter à une autre variable dans le code ou faire cette dernière depuis la fenêtre des tracés.
# ph for plot history
ph <- .SavedPlots
Dans R 3.4.2, je pouvais indexer ph
pour reproduire le tracé correspondant dans un périphérique. Ce qui suit est assez simple:
ph[index_of_plot_in_history]
.Exemple:
for(i in 1:lastplot) {
png('plotname.png')
print(ph[i])
dev.off()
}
Remarque: Parfois, cela ne se produit pas en raison d'une mauvaise programmation. Par exemple, j'utilisais le package MICE pour imputer de nombreux ensembles de données avec un grand nombre de variables et tracer comme indiqué dans la section 4.3 de cet article . Le problème était que seules trois variables par tracé étaient affichées, et si j'utilisais un périphérique png dans mon code, seul le dernier tracé de chaque jeu de données serait enregistré. Cependant, si les tracés étaient imprimés dans une fenêtre, tous les tracés de chaque ensemble de données seraient enregistrés.
Si vos tracés sont en 3D, vous pouvez prendre un instantané de tous vos tracés et les enregistrer au format de fichier .png.
snapshot3d(filename = '../Plots/SnapshotPlots.png', fmt = 'png')
Ou bien, la meilleure façon est de créer une fenêtre de traçage à panneaux multiples en utilisant la fonction par(mfrow)
. Essayez ce qui suit
plotsPath = "../Plots/allPlots.pdf"
pdf(file=plotsPath)
for (x in seq(1,100))
{
par(mfrow = c(2,1))
p1=rnorm(x)
p2=rnorm(x)
plot(p1,p2)
}
dev.off()
Vous pouvez également utiliser les fonctions png
, bmp
, tiff
et jpeg
au lieu de pdf
. Vous pouvez lire leurs avantages et leurs inconvénients et choisir celui qui vous convient le mieux.
Je ne sais pas comment Rstudio ouvre l'appareil où le tracé est tracé, mais je suppose qu'il utilise dev.new()
. Dans ce cas, un moyen rapide d'enregistrer tous les graphiques ouverts consiste à parcourir tous les périphériques et à les écrire à l'aide de dev.print
.
Quelque chose comme :
lapply(dev.list(),function(d){dev.set(d);dev.print(pdf,file=file.path(folder,paste0("graph_",d,".pdf"))})
où folder
est le chemin du dossier dans lequel vous souhaitez stocker votre graphique (pourrait être par exemple folder="~"
si vous êtes sous linux et que vous souhaitez stocker tout votre graphique dans votre dossier personnel).