在 R pdf 输出中抑制或设置 CreationDate/ModDate

Posted

技术标签:

【中文标题】在 R pdf 输出中抑制或设置 CreationDate/ModDate【英文标题】:Suppressing or setting CreationDate/ModDate in R pdf output 【发布时间】:2010-10-22 17:54:06 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

我同意 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】:

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

【讨论】:

我不太同意。例如,在优化某些算法时,您要确保优化不会改变输出(可能在您的其他工作中使用)。将输出置于版本控制之下是一种测试方式,即使可能不是最好的方式。 我也不同意 Tal。是的,在您的 R 代码存储库中,您可能不想包含 pdf 文件,因为它们被视为“输出”。但是在您的 TeX 存储库中,您将 pdf 文件作为输入包含在内,您绝对希望它们处于源代码控制之下。毕竟,当您将论文发送给出版商时,您并没有包含您的 R 代码和数据以供他们生成图表,对吗?【参考方案3】:

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

我只是用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)

【讨论】:

以上是关于在 R pdf 输出中抑制或设置 CreationDate/ModDate的主要内容,如果未能解决你的问题,请参考以下文章

R语言ggplot2可视化箱图(boxplot)自定义设置抑制箱图中异常值数据点的输出(removes boxplot outliers in the ggplot2 graph)

如何在 R studio 的 Caret 中抑制 Boosted 树模型 gbm 的迭代输出

R语言ggplot2可视化抑制(部分)图例(legend)输出实战:抑制颜色图例输出保留数据点形状图例输出

抑制xcodebuild输出或减少冗长[重复]

抑制但捕获 R 中的警告

如何在 Xcode 中抑制 Alamofire 输出以调试控制台