仅在自上次导入后修改文件时导入文件,然后保存到新对象

时间:2016-11-26 23:38:14

标签: r assign

我正在尝试创建一个每周运行一次的脚本。目标是它会出去检查一个同事管理的MS Excel文件。然后测试以查看文件被修改的日期是否比上次导入时更新。如果它更新,它会将文件(我使用readxl包 - WONDERFUL!)导入到一个新对象中,该对象的名称是对象名称中包含的最初修改的原始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"

但该代码会产生错误:

  

粘贴错误(“df-”,as.Date(file.info(pfdFilePath)$ mtime),sep =“”)&lt; - “test”:     赋值目标扩展为非语言对象

然后我尝试了assign函数:

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

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

  

df中的错误 - df-2016-08-09:             二元运算符的非数字参数

我很确定这是一个与我使用的环境有关的错误,但对R来说相对较新,我无法弄明白。我知道assign函数似乎不受欢迎,但那些警告似乎集中在for-loops和lapply函数上。我不是在函数内迭代。每当我运行脚本时,只是一个动态命名的对象。我无法想出更好的方法。如果有另一种方法可以做到这一点,不需要assign函数,或者更好的方法来使用assign函数,我很想知道它。

提前谢谢你,如果这是重复的话,对不起。我花了整整一个晚上挖掘,无法得到我需要的东西。

1 个答案:

答案 0 :(得分:1)

阿卜杜提供了钥匙。

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

我还转换为更干净的paste0函数并摆脱破折号以避免混淆。经验教训。

完美无缺。