5

当 R 使用 pdf() 创建 PDF 时,它在 PDF 中包含 CreationDate 和 ModDate。我在 svn 存储库中有许多这样生成的 PDF,其效果是,当 R 重新制作图形时,即使使用相同的数据,它们也会显示为 svn 的修改(正确地)。让两个人好好相处的最好方法是什么?

我可以简单地从 R 之外的 PDF 中删除这些行,但是这个额外的步骤是不可取的。
作为运行脚本的一部分,我可以将系统时间设置为某个固定值,但这更不可取。
我什至可以说服 svn 使用一个专门的差异来忽略这些行的变化,但这听起来比它的价值更麻烦。

一个非常令人愉快的解决方案是,如果有一种方法可以防止 R 首先将这些行放在 PDF 文件中。我有一个文件系统可以告诉我何时创建和修改文件,非常感谢,我也不需要存储在文件中的信息。

4

3 回答 3

3

我同意 Tal,生成的文件不应该在版本控制中。

关于您最初的问题,我认为答案是否定的,您不能阻止 R 这样做。我发现在 R pdf 帮助文件中没有提到这些选项,http://www.r-cookbook.com/rhelp/pdf.html

如果您查看 R 内部的 pdf 函数(只需执行“pdf”而不带任何括号以打印代码),它实际上会创建 pdf 文件并调用:

.External(PDF, file, old$paper, old$family, old$encoding, old$bg, old$fg, 
      old$width, old$height, old$pointsize, onefile, old$pagecentre, old$title, 
      old$fonts, version[1L], version[2L], old$colormodel, old$useDingbats,
      old$useKerning)

没有提及您正在寻找的选项,因此您可能不走运。除非您想追踪 R 用来生成 PDF 并更改它的代码。

于 2009-05-15T02:36:48.843 回答
1

虽然这实际上并不能回答您的问题,但通常最好从源代码管理中排除自动生成的文件,正是出于这个原因。

于 2009-04-30T01:40:37.400 回答
0

这既不优雅,也不可取。很多事情都可能出错或被利用。但它对我有用。

我只是使用pdf_on而不是pdf,而pdf_off不是dev.off

pdf_on <- function(...) {
    field <- "(\\s*/(Creation|Mod)Date)"
    value <- "\\(D:[0-9]{14}(.[0-9]{2}.[0-9]{2}.?)?\\)"
    from <- paste0("^", field, " ", value, "$")
    to <- "\\1 (D:19700101000000)"
    file <- list(...)[[1]]
    pdf_cmd <<- paste0("sed -E 's_", from, "_", to, "_' -i ", file)
    return(pdf(...))
}
pdf_off <- function(...) {
    ret <- dev.off(...)
    Sys.sleep(0.1)
    system(pdf_cmd)
    return(ret)
}
于 2020-10-14T12:17:24.227 回答