r - 当系列中缺少文件时使用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'
解决方案
exists检查您的环境中是否存在给定的 R 对象(仅将 R 对象作为输入 -> 这会导致您的第一个错误)。在检查它们是否存在之前启动 R 对象prod_file_res_name和beta_file_res_name ,因此存在调用将始终返回 TRUE。您正在寻找的是file.exists函数,它检查文件是否存在于您的工作目录中:
file.exists(prod_file_res_name) && file.exists(beta_file_res_name)
第二个错误是由 R 对象存在而不是您要检查的文件引起的。