首页 > 解决方案 > 当系列中缺少文件时使用for循环比较R中的文件

问题描述

我使用了下面的代码,它成功地比较了两个文本文件并使用 for 循环将差异记录在日志文件中。文件名是串联的,例如 File_1、File_2 等。但是当序列中缺少文件时,代码会停止执行并出现错误 - 没有这样的文件或目录。

然后我使用 if 条件来检查文件是否存在,但我收到了下面提到的错误。

请帮我跳过不存在文件的比较。

代码:

for(i in 1:length){
  prod_file_res_name <- sprintf("path/Query_Prod_%s.txt", i)
  beta_file_res_name <- sprintf("path/Query_Beta_%s.txt", i)

 if (exists('prod_file_res_name' && 'beta_file_res_name')){
  res <- tools::Rdiff(prod_file_res_name, beta_file_res_name, Log = TRUE)

  if(res[2] != "character(0)"){
     write(toString(res[2]), file = "LogFile.txt",append=TRUE)
  }

  else{
    elsevar <- sprintf("No difference found between prod and beta responses for query %s", i)
    print(elsevar)
   }
 }
}

错误:

Error in "prod_file_res_name" && "beta_file_res_name" : 
  invalid 'x' type in 'x && y'

标签: r

解决方案


exists检查您的环境中是否存在给定的 R 对象(仅将 R 对象作为输入 -> 这会导致您的第一个错误)。在检查它们是否存在之前启动 R 对象prod_file_res_namebeta_file_res_name ,因此存在调用将始终返回 TRUE。您正在寻找的是file.exists函数,它检查文件是否存在于您的工作目录中:

   file.exists(prod_file_res_name) && file.exists(beta_file_res_name) 

第二个错误是由 R 对象存在而不是您要检查的文件引起的。


推荐阅读