当R使用pdf()创建PDF时,它在PDF中包含CreationDate和ModDate。我在svn存储库中有许多这样生成的PDF,其效果是当数字由R重新生成时,即使使用相同的数据,它们也会显示为svn的修改(正确)。让两人在一起玩得很好的最好方法是什么?
我可以简单地从R外部的PDF中删除这些行,但是这个额外的步骤是不可取的 作为运行脚本的一部分,我可以将系统时间设置为某个固定值,但这更不可取 我甚至可能说服svn使用专门的差异来忽略这些行的变化,但这听起来比它的价值更麻烦。
一个非常令人愉快的解决方案是,如果有办法防止R首先将这些行放在PDF文件中。我有一个文件系统告诉我何时创建和修改文件非常感谢,我也不需要存储在文件中的信息。
答案 0 :(得分:3)
虽然这实际上并没有回答你的问题,但通常最好从源代码管理中排除自动生成的文件,正是出于这个原因。
答案 1 :(得分: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并更改它的代码。
答案 2 :(得分: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)
}