【发布时间】:2016-11-26 23:38:13
【问题描述】:
我正在尝试创建一个每周运行一次的脚本。目标是它会检查同事管理的 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 = "")
然后我尝试分配功能:
assign(paste("df-", as.Date(file.info(pfdFilePath)$mtime), sep = ""), "test")
运行此代码会创建一个看起来没问题的对象,但是当我对其进行评估或尝试使用 str() 或 class() 时,我收到以下错误:
df 中的错误 -
df-2016-08-09: 二元运算符的非数字参数
我很确定这是一个与我使用 assign 的环境有关的错误,但对于 R 来说相对较新,我无法弄清楚。我知道 assign 函数似乎不受欢迎,但这些警告似乎集中在 for-loops 与 lapply 函数上。不过,我并没有真正在函数中进行迭代。每当我运行脚本时,它只是一个动态命名的对象。我想不出更好的方法来做到这一点。如果有另一种不需要分配功能的方法,或者更好的使用分配功能的方法,我很想知道。
提前谢谢你,如果这是重复的,对不起。我花了整个晚上的时间在挖掘,却无法得到我需要的东西。
【问题讨论】:
-
试试
assign(paste("df", strftime(file.info(some_shell_file)$mtime,"%Y%m%d"), sep = "_"), "test")。这并不是真正的环境错误。你的变量名是一个错误。它包含彼此相减的字符串和数字:"df" - 2016 - 08 - 09。这基本上就是问题所在。 -
我只是略过这个,但 Makefile 能否成为您想要完成的解决方案?
-
感谢达森的建议。我不熟悉 Makefile 解决方案。我检查了它,但可能比我需要的更多。
-
Abdou,R 有点像高尔夫,它能让人保持谦虚。我会尝试你的建议并发布我的结果。谢谢。