如何在 R 中跳过 read.table() 中的空白文件
how to skip blank files in read.table() in R
我想在 R 中使用 read.table 读取文件夹中的大量文本文件,但是这些文本文件中有一些空白文件,当我使用以下代码时出现错误。
filenames<-list.files("M:/files/test1",pattern=".txt");
datalist<-lapply(filenames,function(name){
read.table(paste("M:/files/test1/",name,sep=""),head=FALSE,stringsAsFactors=FALSE,sep="\t")
})
最简单的方法是使用 try
添加一个简单的错误捕获机制:
datalist<-lapply(filenames,function(name){
x <- try(read.table(paste("M:/files/test1/",name,sep=""),head=FALSE,stringsAsFactors=FALSE,sep="\t"))
if(inherits(x, "try-error"))
return(NULL)
else
return(x)
})
要查看实际效果,请尝试玩具示例。 try
所做的是 return 对象,或者在发生错误时是一个包含错误详细信息的特殊对象 class:
x <- try(stop("Test error"))
inherits(x, "try-error")
x
# [1] "Error in try(stop(\"Test error\")) : Test error\n"
# attr(,"class")
# [1] "try-error"
# attr(,"condition")
# <simpleError in doTryCatch(return(expr), name, parentenv, handler): Test error>
相对于如果你只是在没有 try
的情况下引入错误,程序将停止并且 x
将是未定义的:
rm(x)
x <- stop("Test error")
# Error: Test error
x
# Error: object 'x' not found
如果 try()
中的操作成功,它只是 return 正确的对象:
x <- try(1)
x
# [1] 1
跳过空文件
测试每个文件的大小,跳过0
的文件大小
for (file in list.files(,"*.txt")){
if (file.size(file) == 0) next
print(file)
}
我想在 R 中使用 read.table 读取文件夹中的大量文本文件,但是这些文本文件中有一些空白文件,当我使用以下代码时出现错误。
filenames<-list.files("M:/files/test1",pattern=".txt");
datalist<-lapply(filenames,function(name){
read.table(paste("M:/files/test1/",name,sep=""),head=FALSE,stringsAsFactors=FALSE,sep="\t")
})
最简单的方法是使用 try
添加一个简单的错误捕获机制:
datalist<-lapply(filenames,function(name){
x <- try(read.table(paste("M:/files/test1/",name,sep=""),head=FALSE,stringsAsFactors=FALSE,sep="\t"))
if(inherits(x, "try-error"))
return(NULL)
else
return(x)
})
要查看实际效果,请尝试玩具示例。 try
所做的是 return 对象,或者在发生错误时是一个包含错误详细信息的特殊对象 class:
x <- try(stop("Test error"))
inherits(x, "try-error")
x
# [1] "Error in try(stop(\"Test error\")) : Test error\n"
# attr(,"class")
# [1] "try-error"
# attr(,"condition")
# <simpleError in doTryCatch(return(expr), name, parentenv, handler): Test error>
相对于如果你只是在没有 try
的情况下引入错误,程序将停止并且 x
将是未定义的:
rm(x)
x <- stop("Test error")
# Error: Test error
x
# Error: object 'x' not found
如果 try()
中的操作成功,它只是 return 正确的对象:
x <- try(1)
x
# [1] 1
跳过空文件
测试每个文件的大小,跳过0
的文件大小for (file in list.files(,"*.txt")){
if (file.size(file) == 0) next
print(file)
}