如何在R中的read.table()中跳过空白文件

时间:2015-04-06 08:45:11

标签: r read.table

我想在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")
})

2 个答案:

答案 0 :(得分:4)

最简单的方法是使用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的作用是返回对象,或者在发生错误时返回包含错误详细信息的特殊对象类:

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()内成功,则只返回正确的对象:

x <- try(1)
x
# [1] 1

答案 1 :(得分:1)

跳过空文件

测试每个文件的大小,并跳过文件大小0

for (file in list.files(,"*.txt")){
    if (file.size(file) == 0) next
    print(file)
}