文件搜索函数中search.strings传'1'无返回结果的排查求助
问题排查与修复:R语言文件搜索函数无返回结果(单搜索字符串场景)
核心问题
你的函数存在代码块范围错误:当search.strings长度为1时,if (length(search.strings)>1)的条件不成立,导致后续生成数据框、返回结果、导出文件的核心逻辑完全没有执行,函数走到末尾默认返回NULL,因此你看不到任何输出。
问题代码分析
原代码中,if (length(search.strings)>1)的闭合大括号位置错误,把length(match1)判断、file.info调用、数据框生成等所有核心逻辑都包裹在了这个if块内。这意味着只有当搜索字符串数量大于1时,这些代码才会运行;单字符串场景下直接跳过,自然没有返回结果。
修复后的代码
调整大括号位置,并优化路径拼接、列索引等细节,确保单/多搜索字符串场景都能正常执行:
search_for_filenames_containing_multiple_patterns_and_output_file_info <- function(directory = '.', search.strings = character()){ # 校验搜索字符串非空 if (length(search.strings) == 0) { stop('Nothing to match with specified') } # 获取匹配第一个搜索字符串的条目 match1 <- list.files(directory, pattern = search.strings[1], ignore.case = TRUE, full.names = FALSE) # 过滤掉目录,仅保留文件 match1 <- match1[!dir.exists(file.path(directory, match1))] # 多搜索字符串时逐层过滤 if (length(search.strings) > 1) { for (i in 2:length(search.strings)) { match1 <- grep(search.strings[i], match1, ignore.case = TRUE, value = TRUE) } } # 关键修正:将多字符串过滤的if块在此闭合 # 无匹配文件返回提示 if (length(match1) == 0) { return('there were no files matching all the entries of search.strings') } # 获取文件信息并生成数据框 info <- file.info(file.path(directory, match1)) df1 <- data.frame(Name_file = match1, mtime = info$mtime, size = info$size, stringsAsFactors = FALSE) # 导出数据框到文件 outpfilename <- file.path(directory, "scrlisting.txt") write.table(df1, outpfilename, append = FALSE, quote = FALSE, sep = '\t', row.names = FALSE, col.names = FALSE) # 返回数据框 return(df1) }
额外优化说明
- 用
file.path()替代手动拼接路径,避免不同操作系统的路径分隔符兼容问题 - 用列名
info$mtime/info$size替代索引info[,4],避免file.info返回列顺序变化导致的错误 - 把
vector(mode = 'character')简化为character(),符合R语言惯用写法
测试验证:传入search.strings='1'时,函数会正常执行过滤、信息获取、数据框导出及返回操作,结果与单独运行代码块一致。
内容的提问来源于stack exchange,提问作者Rishav Dhariwal
相关产品推荐
相关产品推荐

