【问题标题】:R - Reading unknown number of files [duplicate]R - 读取未知数量的文件[重复]
【发布时间】:2017-03-24 07:54:51
【问题描述】:

我是 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 循环在每次迭代时继续。

我们将不胜感激有关此问题的任何想法(包括读取未知数量文件的更好方法)。感谢您的宝贵时间!

像素

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

【问题讨论】:

  • 使用list.files 函数获取所有文件,用户pattern 选择特定文件...这可以用于for循环或任何其他轻松处理它们的方法.....跨度>

标签: r import while-loop try-catch


【解决方案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
}

【讨论】:

  • 谢谢,我想我用了错误的关键字没有找到这个“dir”函数。我尝试了您的解决方案,并且效果很好。知道如何在 while 循环中处理 trycatch 吗?
  • @Pyxel 查看更新。但我不建议使用此代码。
  • > 非常感谢您的帮助!我不会使用它,因为您的第一个解决方案肯定更干净,但我很好奇如何解决我最初的问题。
猜你喜欢
  • 2013-02-12
  • 2013-11-09
  • 2017-05-22
  • 1970-01-01
  • 2012-02-01
  • 2015-08-01
  • 2021-09-14
  • 1970-01-01
  • 2021-07-08
相关资源
最近更新 更多