仅当文件自上次导入后被修改后才导入文件,然后保存到新对象

Importing a file only if it has been modified since last import and then save to a new object

我正在尝试创建一个脚本,我 运行 大约每周一次。目标是它会出去检查同事管理的 MS Excel 文件。然后它会测试文件的修改日期是否比上次导入的日期更新。如果它较新,它会将文件(我正在使用 readxl 包 - 太棒了!)导入一个新对象,该对象的名称是原始 Excel 文件上次修改的日期,包含在对象名称中。除了将导入的 data.frame 分配给包含日期的新对象外,我一切正常。

我使用的代码示例是:

首先,我创建了一个对象,其路径指向感兴趣的文件。

pfdFilePath <- file.path("H:", "3700", "3780", "002-00", "3. 
    Project Information", "Program", "RAH program.xls")

经过测试验证文件是否已被修改,我尝试了简单的赋值("test"只是一个简单的例子):

paste("df-", as.Date(file.info(pfdFilePath)$mtime), sep = "") <- "test"

但是该代码会产生错误:

Error in paste("df-", as.Date(file.info(pfdFilePath)$mtime), sep = "") <- "test" : target of assignment expands to non-language object

然后我尝试赋值函数:

assign(paste("df-", as.Date(file.info(pfdFilePath)$mtime), sep = ""), "test")

运行 这段代码创建了一个看起来没问题的对象,但是当我评估它,或者尝试使用 str() 或 class() 时,我得到以下错误:

Error in df - df-2016-08-09 : non-numeric argument to binary operator

我很确定这是一个与我使用的 assign 环境有关的错误,但是对于 R 来说还比较陌生,我无法弄清楚。我知道 assign 函数似乎不受欢迎,但这些警告似乎集中在 for 循环与 lapply 函数上。不过,我并没有真正在函数内进行迭代。每当我 运行 一个脚本时,它只是一个动态命名的对象。我想不出更好的方法来做到这一点。如果有另一种不需要 assign 函数的方法,或者更好的使用 assign 函数的方法,我很想知道。

在此先感谢您,如果这是重复的,我们深表歉意。我花了整个晚上挖掘,无法得出我需要的东西。

Abdou 提供了密钥。

assign(paste0("df.", "pfd.", strftime(file.info(pfdFilePath)$mtime, "%Y%m%d")), "test01")

我还转换为更清洁的 paste0 函数并去掉了破折号以避免混淆。吸取教训。

完美运行。