このようなことは何もできません。あなたが助けることができる機能を作成することができます。多分これ
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)
}
のようなものは、ここで私は、さまざまなオブジェクトの種類を見て、ディスクにそれらを書き出すsavers
のリストを作成します。次に、サンプルリスト
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)
と私はあなたが本当にそれ以降のファイル名を決定するために、名前のリストが必要
save_list(x)
注意してそれらを書くことができます。ここでは、具体的にはx
の要素の名前を付けますが、存在しない場合は単純なインデックスが使用されます。保存機能をスワップアウトして、値を画面に印刷するだけで何が書き込まれるかを確認することもできます。
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)"
これは、ディレクトリが既に存在することを前提としています。最初に確認する必要がある場合は、解決方法についてはthis questionを参照してください。
ありがとうMrFlick! –