Es gibt nichts eingebaut in das würde so etwas tun. Sie könnten eine Funktion erstellen, die Ihnen helfen könnte. Vielleicht so etwas wie
savers <- list(
"ggplot" = function(pp, base) ggsave(filename=paste0(base,".png"), plot=pp),
"data.frame" = function(dd, base) write.table(dd, file=paste0(base,".txt"))
)
save_list <- function(x, prefix=deparse(substitute(x)), savers=savers) {
ids = as.character(if(!is.null(names(x))) {names(x)} else {seq_along(x)})
ids[nchar(ids)<1] <- as.character(seq_along(x)[nchar(ids)<1])
ret <- Map(function(x, id) {
found <- FALSE
for(type in names(savers)) {
if(inherits(x, type)) {
found <- TRUE
ret <- savers[[type]](x, file.path(prefix, id))
return(ret)
}
}
if (!found) {
if (class(x)=="list") {
save_list(x, file.path(prefix, id), savers=savers)
} else {
stop(paste("unable to save object of type:", class(x)))
}
}
}, x, ids)
invisible(ret)
}
Hier erstelle ich eine Liste von savers
, die an den verschiedenen Objekttypen suchen und sie auf eine Disc schreiben. Dann mit einer Beispielliste
plot_list <- Map(function(x) ggplot(mtcars) + geom_point(aes(cyl, disp)) + ggtitle(x), paste("plot", 1:3))
data_list <- replicate(4, data.frame(x=runif(10), y=rnorm(10)), simplify=FALSE)
x <- list(plot_list=plot_list, data_list=data_list)
Ich kann sie mit
save_list(x)
Hinweis schreiben, dass Sie wirklich eine benannte Liste benötigen, um die späteren Dateinamen zu bestimmen. Hier benenne ich explizit die Elemente von x
, aber wenn sie nicht vorhanden sind, wird eine einfache Indizierung verwendet. Sie können die Speicherfunktionen auch austauschen, um zu sehen, was beim Drucken des Wertes auf dem Bildschirm geschrieben wird.
noop <- list(
"ggplot" = function(pp, fn) print(paste(paste0(fn,".png"),"(plot)")),
"data.frame" = function(dd, fn) print(paste(paste0(fn,".txt"), "(df)"))
)
save_list(x, savers=noop)
# [1] "x/plot_list/plot 1.png (plot)"
# [1] "x/plot_list/plot 2.png (plot)"
# [1] "x/plot_list/plot 3.png (plot)"
# [1] "x/data_list/1.txt (df)"
# [1] "x/data_list/2.txt (df)"
# [1] "x/data_list/3.txt (df)"
# [1] "x/data_list/4.txt (df)"
Beachten Sie, dass davon ausgegangen wird, dass das Verzeichnis bereits vorhanden ist. Wenn Sie zuerst nachsehen müssen, finden Sie unter this question mögliche Lösungen.
Vielen Dank MrFlick! –