如何修改R代码查找文件夹中倒数第二个被修改的文件
问题解答
核心结论
无法通过给which.max传入-1参数实现需求:which.max函数的作用是返回向量中第一个最大值的下标,没有支持偏移取值的入参,需要调整代码逻辑实现。
代码修改方案
场景1:按目录分组,取每个目录下倒数第二新的文件
修改原tapply内的匿名函数逻辑,对文件修改时间排序后取倒数第二个下标,同时增加边界判断避免目录下文件不足2个时报错:
files <- list.files(path="MYFILEPATH",pattern="files.xls",full.names = TRUE,recursive = TRUE) dirs <- dirname(files) # 每个目录取倒数第二新的文件 second_lastfiles <- tapply(files, dirs, function(v) { # 获取文件修改时间 mtimes <- file.mtime(v) # 按时间升序排序生成索引 sorted_idx <- order(mtimes) # 目录下文件数≥2才取倒数第二,否则返回NA,可根据需求调整返回逻辑 if (length(sorted_idx) >= 2) { v[sorted_idx[length(sorted_idx)-1]] } else { NA_character_ } })
场景2:全局取指定路径下倒数第二新的文件
修改原全局查询逻辑,对文件修改时间排序后取倒数第二个下标:
File_List <- file.info(list.files("//MYFILEPATH", full.names = T)) # 按修改时间升序排序的索引 sorted_mtime_idx <- order(File_List$mtime) # 取倒数第二个索引对应的路径 Path_Of_Interest <- if (length(sorted_mtime_idx) >=2 ) { rownames(File_List)[sorted_mtime_idx[length(sorted_mtime_idx)-1]] } else { NA_character_ }
内容的提问来源于stack exchange,提问作者JeffWithpetersen
相关产品推荐
相关产品推荐

