交互式迭代许多图表到不同的文件

时间:2013-01-16 21:26:57

标签: r loops plot

我需要构建一个函数,它将绘制多个pdf,读入它们,组合结果(不同大小的pdfs),保存组合文件并删除初始文件。我正在挂起交互式绘制多个图到外部pdf的初始部分。问题是我需要一种在for循环中暂停,等待情节然后在接收情节后继续前进的方法。我认为readLines是可行的方式(可能是这样),但这不起作用(即没有制作情节)。

如何在pdf之间进行R暂停,然后转到dev.off并再次重复该过程?期望的结果是在wd中有三个文件称为file1.pdffile2.pdffile3.pdf。再次,在运行循环/ lapply之后,此过程将是交互式的。

这是问题的MWE:

widths <- c(10, 9, 8)
heights <- c(11, 9, 7)
file <- "foo.pdf"
lapply(1:3, function(i) {  #will askfor/take 3 plots interactively
    qo <- gsub(".pdf", paste0(i, ".pdf"), file, fixed = TRUE)
    cat("plot now...")
    pdf(file=qo, width = widths[i], height = heights[i])
#pause command here
    dev.off()
})

#the interactive part
plot(1:10)
plot(1:13)
plot(1:15)  

编辑1 相关问题: Determine ghostscript version

编辑2 以下是我使用此信息创建-click here-

的软件包的链接

2 个答案:

答案 0 :(得分:2)

这么简单吗?

for(i in 1:3){
  cat(i, "\n")
  cat("plot now...")
  readLines(n=1)
}

停止从stdin(即控制台)读取一行。按Enter继续。

答案 1 :(得分:2)

你在找这样的东西吗?

widths <- c(10, 9, 8)
heights <- c(11, 9, 7)
file <- "foo.pdf"
lapply(1:3, function(i) {
    qo <- gsub(".pdf", paste0(i, ".pdf"), file, fixed = TRUE)
    pdf(file=qo, width = widths[i], height = heights[i])
    # Reads string interactively
    input <- scan("", what = "character", nmax=1, quiet=TRUE)
    # Executes `input` as a command (possibly, needs extra check)
    eval(parse(text=input))
    dev.off()
})

这会产生三个文件:foo1.pdffoo2.pdffoo3.pdf,并使用您以交互方式输入的命令生成图表。