我正在尝试创建一个每周运行一次的脚本。目标是它会出去检查一个同事管理的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"
但该代码会产生错误:
然后我尝试了assign函数:粘贴错误(“df-”,as.Date(file.info(pfdFilePath)$ mtime),sep =“”)&lt; - “test”: 赋值目标扩展为非语言对象
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函数,我很想知道它。
提前谢谢你,如果这是重复的话,对不起。我花了整整一个晚上挖掘,无法得到我需要的东西。
答案 0 :(得分:1)
阿卜杜提供了钥匙。
assign(paste0("df.", "pfd.", strftime(file.info(pfdFilePath)$mtime, "%Y%m%d")), "test01")
我还转换为更干净的paste0函数并摆脱破折号以避免混淆。经验教训。
完美无缺。