我是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。有什么想法吗?
答案 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
}