仅当文件自上次导入后被修改后才导入文件,然后保存到新对象
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 函数并去掉了破折号以避免混淆。吸取教训。
完美运行。
我正在尝试创建一个脚本,我 运行 大约每周一次。目标是它会出去检查同事管理的 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 函数并去掉了破折号以避免混淆。吸取教训。
完美运行。