当使用save()或save.image()时,如何防止文件被覆盖?

11

我正在寻找一种方法来防止在使用R中的save()和save.image()函数时意外覆盖文件。

2个回答

9
使用file.exists()来测试文件是否存在,如果存在,则在名称后面添加一个字符串。
编辑:
谢谢Marek,我会进一步扩展你的想法...他可以添加以下内容以处理save()save.image()两者。
SafeSave <- function( ..., file=stop("'file' must be specified"), overwrite=FALSE, save.fun=save) {
  if ( file.exists(file) & !overwrite ) stop("'file' already exists")
  save.fun(..., file=file)
}

如果在REPL会话中使用source(),用户可能不知道函数覆盖,因此我不会覆盖保存。


有人知道如何创建一个对话框来通知用户要写入的文件已经存在吗?用户可能会在不知情的情况下关闭R会话,导致什么都没有保存。 - ggg

5

正如Vince所写,你可以使用file.exists()来检查文件是否存在。

我建议替换原始的save函数:

save <- function( ..., file=stop("'file' must be specified"), overwrite=FALSE ) {
  if ( file.exists(file) & !overwrite ) stop("'file' already exists")
  base::save(..., file=file)
}

你可以编写类似的内容来替换使用 save.image() 的方法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接