R - 读取未知数量的文件

时间:2016-11-10 10:16:32

标签: r import while-loop try-catch

我是R.的新手。我尝试处理一些实验数据,在阅读文件时我遇到了一个错误。 我想读一个文件夹中的一些数据文件,但我不知道有多少数据文件。我只知道所有文件都被命名为“Subject1ManualX.log”,X为1或更高。由于我没有发现计算文件夹中有多少文件的可能性,我尝试在while循环中打开文件,直到引发异常(即我尝试打开“Subject1Manual1.log”,然后“Subject1Manual2.log”)等)。

这是我的代码(打印用于调试):

# Script to work on ET data
temp <- 0

while (temp == 0){
  tryCatch({
    subjectData <- read.delim("D:/Doctorat/XPs/XP1-2_LIPSMWA/SmartEye/Subject1/Subject1Manual3.log")

  }, warning = function(w){
    print(paste("warning", i))
    temp <- 1

  }, error = function(e){
    print(paste("error", i))
    temp <- 1

  }, finally = {
    print("finished")
  })
}

不幸的是它不起作用(这就是为什么我在这里......)。我知道我会有警告和错误。如果我处理警告,R崩溃是因为没有处理错误(“所有连接都在使用中”崩溃)。如果我只处理错误,它就不会通过它,并且while循环会在每次迭代时继续。

对此问题的任何想法都将受到高度赞赏(包括更好的方法来读取未知数量的文件)。谢谢你的时间!

Pyxel

编辑:好的一些好人回答了如何导入多个数据文件,但为了好奇,我想知道如何在while循环中处理try catch。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

# Here we read path to all '*.log' files in folder
path_to_files = dir("D:/Doctorat/XPs/XP1-2_LIPSMWA/SmartEye/Subject1/", 
                    full.names = TRUE, 
                    recursive = TRUE, 
                    pattern = "\\.log$")

# further we read all files to list
files = lapply(path_to_files, read.delim)

# and finaly we combine files to single data.frame
# headers of files should be identical
res = do.call(rbind, files)

UPDATE 使用tryCatch和while编写代码。它不安全,它在循环中增加data.frame - 这是不好的做法。

subjectData = TRUE
i = 1
res = NULL
while (!is.null(subjectData)){
    subjectData <-  tryCatch({
        read.delim(sprintf("D:/Doctorat/XPs/XP1-2_LIPSMWA/SmartEye/Subject1/Subject1Manual%s.log", i))

    }, warning = function(w){
        print(paste("warning", i))
        NULL

    }, error = function(e){
        print(paste("error", i))
        NULL

    })
    if(is.null(res)){
        res = subjectData
    } else {
        res = rbind(res, subjectData)
    }
    i = i + 1
}