在循环中命名jpg文件

时间:2014-03-14 15:29:24

标签: r loops naming

我正在进行循环操作,该操作从两个数据帧(obs& sim)的同一列读取并生成散点图。 。每个数据框中共有24列。以下脚本工作正常。

for(i in 1:24) {
  plot (obs[,i],sim[,i],xlab="obs",ylab="sim",main=substitute(paste('Lead Time (hrs) = ', a), list(a=i)))
}

但是我想保存文件夹中的每个图(C:/ RPlots /),我想在循环中也包含这个操作。

我使用了以下脚本,但它没有工作

for(i in 1:24) {
  jpeg('C:/RPlots/paste("myplot_", c(i), ".jpg")')
  plot (obs[,i],sim[,i],xlab="obs",ylab="sim",main=substitute(paste('Lead Time (hrs) = ', a), list(a=i)))
  dev.off()
}

任何人都可以帮助我吗?

3 个答案:

答案 0 :(得分:5)

您在jpeg电话

中收到错误消息

试试这个

for(i in 1:24) {
jpeg(paste0("C:/RPlots/myplot_",i,".jpg")) 
plot (obs[,i],sim[,i],xlab="obs",ylab = "sim",
      main = substitute(paste('Lead Time (hrs) = ', a), list(a = i))) 
dev.off() 
}

答案 1 :(得分:2)

您可以使用pastepaste0sprintf来创建名称,但在文件参数中使用整数格式会更简单。

例如,如果使用如下命令启动jpeg设备:

jpeg('C:/RPlots/myplot_%03d.jpg')

在循环之前,然后在循环中创建多个图,然后第一个图将保存在文件myplot_001.jpg中,第二个图保存在myplot_002.jpg中,第三个图保存在myplot_003.jpg中等。

"%03d"是重要的部分,3表示你想要3位数字,0表示用0填充它们。根据你的喜好进行调整。

答案 2 :(得分:0)

正如@Greg Snow所提到的,如果你出于某种原因无法将jpeg()函数放在循环之外,那么C库的成名就会sprintf()

paste0("C:/RPlots/myplot",sprintf("%03d",i),".jpg")

这里,i是来自for循环迭代器的整数。这将设置前导零填充,如果您希望稍后使用ffmpeg等迭代这些图像,这很好。