R用for循环读取文件

时间:2011-07-20 08:41:11

标签: r loops statistics stat

我只想使用R中的10个文件。我想要计算一些东西。 进出口。文件: stat1_pwg1.out stat23_pwg2.out .. stat45_pwg10.out

我试试这个:

for (i in 1:10){
Data=paste("../XYZ/*_pwg",i,".out",sep="")
line=read.table(Data,head=T)
}

但它不起作用?有什么特别的吗?

3 个答案:

答案 0 :(得分:4)

我怀疑您的问题来自通配符*。更好的方法是首先使用dir存储文件名,然后找到你想要的文件名。

files <- dir("../XYZ",pattern="stat[0-9]+_pwg[0-9]+\.out")
for(f in files) {
  line=read.table(Data,head=T)
}

您还可以使用apply系列函数之一来完全消除for循环。

答案 1 :(得分:2)

关于您的代码的一些事情。

paste是矢量化的,因此您可以将其从循环中取出。

paste("../XYZ/*_pwg", 1:10, ".out", sep = "")

(虽然您稍后会看到,但实际上根本不需要使用paste。)

read.table不接受通配符;它需要与文件名完全匹配。

您可能最好使用dir查找目录中存在的文件,并通过合适的命名方案进行过滤,而不是尝试构建文件名的向量。

要过滤文件,请在模式参数中使用正则表达式。您可以使用glob2rx将通配符转换为正则表达式。

file_names <- dir("../XYZ", pattern = glob2rx("stat*_pwg*.out"))
data_list <- lapply(filenames, read.table, header = TRUE)

对于稍微更具体的拟合,通配符只匹配数字而不是任何东西,你需要直接使用正则表达式。

file_names <- dir("../XYZ", pattern = "^stat[[:digit:]]+_pwg[[:digit:]]+\\.out$")

答案 2 :(得分:0)

    files <- dir(pattern="*Rip1_*")

    files

    for (F in files){ assign(F , Readfunc(F))}