我正在尝试将使用
par(mfrow)
获得的所有绘图保存在我的电脑中。这个想法是保存每个 png 图像并添加一个数字以避免替换。
这是一个玩具示例,我使用
lapply
和 par(mfrow)
生成多个直方图。
par(mfrow=c(1,2))
lapply(1:ncol(mtcars), function(x){
hist(mtcars[,x])
})
我尝试过(没有成功)的是使用另一个
lapply
以不同的名称保存图像。
lapply(1:ceiling(ncol(mtcars)/2), function(n){
png(paste0("../Desktop/histogram_", n, ".png"))
par(mfrow=c(1,2))
lapply(1:ncol(mtcars), function(x){
hist(mtcars[,x])
})
dev.off()
})
它在 50% 时工作。它以不同的名称保存不同的直方图,但它多次保存最后一个图。
如何将第一个图保存到最后一个图?
重要提示:我不想保存每个单独的直方图,我想保存每个图像中保留的每对直方图。
我找到了一个类似的post来执行此操作,但它使用 for 循环和 if 语句(我想避免的东西)。
任何帮助将不胜感激。
提前致谢
怎么样
lapply(
seq(1, ncol(mtcars), 2),
function(x) {
png(paste0("histogram_", x, ".png"))
par(mfrow=c(1, 2))
hist(mtcars[, x])
if (x < ncol(mtcars)) hist(mtcars[, (x+1)])
dev.off()
}
)
在成对的列上运行该函数...
编辑
为了回答OP在评论中提出的问题,这里有一个变体,适用于任意数量的行和列以及任何数据框(仅包含数字列)。
makePlots <- function(df, nr, nc) {
k <- nr * nc
lapply(
seq(1, ncol(df), k),
function(x, df, nr, nc) {
png(paste0("histogram_", x, ".png"))
par(mfrow=c(nr, nc))
for (z in x:(x+k-1)) {
if (z <= ncol(df)) hist(df[, z])
}
dev.off()
},
nr = nr,
nc = nc,
df = df
)
}
makePlots(mtcars, 3, 2)