我使用了下面的代码,该代码成功地比较了两个文本文件,并使用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'
答案 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")