当系列中缺少文件时,使用for循环比较R中的文件

时间:2018-10-29 14:21:38

标签: 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'

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

由于exists()查找单个对象(来自文档):

  

是否定义了对象?

     

说明

     

查找具有给定名称的R对象,并可能返回它

'prod_file_res_name' && 'beta_file_res_name'不起作用。

重写  exists("prod_file_res_name" && "beta_file_res_name")

收件人:

exists("prod_file_res_name") && exists("beta_file_res_name")