gpt4 book ai didi

r - 如果已存在具有该名称的文件,如何在 R 中创建新的输出文件?

转载 作者:行者123 更新时间:2023-12-01 07:55:36 26 4
gpt4 key购买 nike

我正在尝试使用每两个小时运行一次的 Windows 任务调度程序运行 R 脚本文件。我想做的是通过 Twitter API 收集一些推文并运行情绪分析,生成两个图表并将其保存在一个目录中。问题是,当脚本再次运行时,它会替换目录中已存在的具有该名称的文件。

例如,当我使用 pdf("file") 函数时,它第一次运行良好,因为目录中不存在具有该名称的文件。问题是我希望 R 脚本每隔一小时运行一次。所以,我需要一些在目录中创建一个新文件而不是替换该文件的解决方案。就像从 Google Chrome 多次下载文件时发生的情况一样。

最佳答案

我只是给文件名加上时间戳。

> filename = paste("output-",now(),sep="")
> filename
[1] "output-2014-08-21 16:02:45"

使用任何标准的日期格式化函数来定制以适应口味 - 也许您不希望文件名中有空格和冒号:

> filename = paste("output-",format(Sys.time(), "%a-%b-%d-%H-%M-%S-%Y"),sep="")
> filename
[1] "output-Thu-Aug-21-16-03-30-2014"

如果您想要在文件名中添加数字的行为,那么可以这样:

serialNext = function(prefix){
if(!file.exists(prefix)){return(prefix)}
i=1
repeat {
f = paste(prefix,i,sep=".")
if(!file.exists(f)){return(f)}
i=i+1
}
}

用法。首先,“foo”不存在,所以它返回“foo”:

> serialNext("foo")
[1] "foo"

编写一个名为“foo”的文件:

> cat("fnord",file="foo")

现在它返回“foo.1”:

> serialNext("foo")
[1] "foo.1"

创建它,然后它返回“foo.2”等等......

> cat("fnord",file="foo.1")
> serialNext("foo")
[1] "foo.2"

如果多个进程可能正在写入一个新文件,那么这种事情可能会中断 - 如果两个进程同时检查,则有一个机会窗口,两个进程都看不到“foo.2”并认为他们都可以创建它。如果您有两个进程尝试同时写入新文件,时间戳也会发生同样的情况。

这两个问题都可以通过生成随机 UUID 并将其粘贴到文件名上来解决,否则您需要在操作系统级别具有原子性的东西。

但对于每小时两次的工作,我认为将时间戳缩小到几分钟可能就足够了。

关于r - 如果已存在具有该名称的文件,如何在 R 中创建新的输出文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25429557/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com